计算二叉排序树查找成功的平均查找长度,输出结果,用C语言来写
时间: 2023-12-21 17:18:41 浏览: 78
好的,下面是用 C 语言实现计算二叉排序树查找成功的平均查找长度的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int val;
struct Node *left;
struct Node *right;
} Node;
// 插入节点
Node *insert(Node *root, int val) {
if (!root) {
root = (Node *)malloc(sizeof(Node));
root->val = val;
root->left = NULL;
root->right = NULL;
} else if (val < root->val) {
root->left = insert(root->left, val);
} else if (val > root->val) {
root->right = insert(root->right, val);
}
return root;
}
// 计算节点深度之和
int sum_depth(Node *root, int depth) {
if (!root) {
return 0;
}
return depth + sum_depth(root->left, depth + 1) + sum_depth(root->right, depth + 1);
}
// 计算节点总数
int count_nodes(Node *root) {
if (!root) {
return 0;
}
return 1 + count_nodes(root->left) + count_nodes(root->right);
}
// 计算平均查找长度
float avg_search_length(Node *root) {
int sum = sum_depth(root, 0);
int count = count_nodes(root);
return (float)sum / count;
}
int main() {
// 构造一棵二叉排序树
Node *root = NULL;
root = insert(root, 5);
root = insert(root, 3);
root = insert(root, 7);
root = insert(root, 2);
root = insert(root, 4);
root = insert(root, 6);
root = insert(root, 8);
// 计算平均查找长度并输出结果
float avg_len = avg_search_length(root);
printf("平均查找长度为 %.2f\n", avg_len);
// 释放内存
// ...
return 0;
}
```
这里我构造了一棵简单的二叉排序树,并计算了它的平均查找长度。你可以根据自己的需要修改代码中的节点值来构造不同的二叉排序树。
阅读全文