写一个求二叉排序树平均查找长度的c语言代码
时间: 2023-09-05 22:09:09 浏览: 105
用C语言编写二叉排序树
以下是一个求二叉排序树平均查找长度的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct BSTNode {
int key;
struct BSTNode* left;
struct BSTNode* right;
} BSTNode;
// 插入节点
BSTNode* insert(BSTNode* root, int key) {
if (root == NULL) {
root = (BSTNode*)malloc(sizeof(BSTNode));
root->key = key;
root->left = root->right = NULL;
} else if (key < root->key) {
root->left = insert(root->left, key);
} else {
root->right = insert(root->right, key);
}
return root;
}
// 计算二叉排序树平均查找长度
double avg_search_length(BSTNode* root, int depth) {
if (root == NULL) {
return 0;
} else {
return depth + avg_search_length(root->left, depth + 1) + avg_search_length(root->right, depth + 1);
}
}
int main() {
BSTNode* root = NULL;
int n, key;
printf("请输入节点个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入节点 %d 的值:", i+1);
scanf("%d", &key);
root = insert(root, key);
}
double avg_length = avg_search_length(root, 1) / n;
printf("二叉排序树平均查找长度为:%.2f\n", avg_length);
return 0;
}
```
注意,在输入节点个数和节点值时,都需要用户手动输入。在计算平均查找长度时,需要传入根节点和当前节点的深度,递归计算左右子树的平均查找长度并相加,最终返回平均查找长度。
阅读全文