用C语言实现,计算二叉排序树查找成功的的平均查找长度
时间: 2023-09-05 10:11:08 浏览: 389
好的,计算二叉排序树查找成功的平均查找长度的C语言实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
// 插入节点到二叉排序树中
void insert(struct TreeNode** root, int val) {
if (*root == NULL) {
*root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
(*root)->val = val;
(*root)->left = NULL;
(*root)->right = NULL;
}
else if (val < (*root)->val) {
insert(&((*root)->left), val);
}
else if (val > (*root)->val) {
insert(&((*root)->right), val);
}
}
// 计算二叉排序树的深度
int depth(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
else {
int leftDepth = depth(root->left);
int rightDepth = depth(root->right);
return (leftDepth > rightDepth) ? leftDepth + 1 : rightDepth + 1;
}
}
// 计算二叉排序树查找成功的平均查找长度
float avgSearchLength(struct TreeNode* root, int level) {
if (root == NULL) {
return 0;
}
else {
float leftLength = avgSearchLength(root->left, level + 1);
float rightLength = avgSearchLength(root->right, level + 1);
return (leftLength + rightLength + level);
}
}
int main() {
struct TreeNode* root = NULL;
int arr[7] = { 5, 3, 7, 1, 9, 4, 6 };
for (int i = 0; i < 7; i++) {
insert(&root, arr[i]);
}
int treeDepth = depth(root);
float avgLength = avgSearchLength(root, 1) / 7.0;
printf("二叉排序树的深度为:%d\n", treeDepth);
printf("二叉排序树查找成功的平均查找长度为:%f\n", avgLength);
return 0;
}
```
以上代码实现了二叉排序树的插入、深度计算和查找成功的平均查找长度计算。在主函数中,我们插入了一些节点,计算了二叉排序树的深度和查找成功的平均查找长度,并将结果打印出来。
阅读全文