二叉查找树查询结点计算平均查找长度c++
时间: 2023-12-22 21:38:47 浏览: 103
平衡二叉树的建立和平均查找长度的计算,c++
4星 · 用户满意度95%
要计算二叉查找树的平均查找长度,需要知道树的结构和节点的分布情况。下面是一个使用C++实现的计算平均查找长度的示例代码:
```cpp
#include <iostream>
// 二叉查找树节点定义
struct Node {
int key;
Node* left;
Node* right;
Node(int k) : key(k), left(nullptr), right(nullptr) {}
};
// 向二叉查找树中插入节点
Node* insert(Node* root, int key) {
if (root == nullptr) {
return new Node(key);
}
if (key < root->key) {
root->left = insert(root->left, key);
} else if (key > root->key) {
root->right = insert(root->right, key);
}
return root;
}
// 计算二叉查找树的节点个数
int countNodes(Node* root) {
if (root == nullptr) {
return 0;
}
return 1 + countNodes(root->left) + countNodes(root->right);
}
// 计算二叉查找树的深度
int depth(Node* root) {
if (root == nullptr) {
return 0;
}
int leftDepth = depth(root->left);
int rightDepth = depth(root->right);
return 1 + std::max(leftDepth, rightDepth);
}
// 计算二叉查找树的平均查找长度
float averageSearchLength(Node* root) {
int nodeCount = countNodes(root);
int treeDepth = depth(root);
return static_cast<float>(treeDepth + 1) / nodeCount;
}
int main() {
Node* root = nullptr;
// 向二叉查找树中插入节点
root = insert(root, 10);
root = insert(root, 5);
root = insert(root, 15);
root = insert(root, 3);
root = insert(root, 7);
// 计算平均查找长度
float avgSearchLength = averageSearchLength(root);
// 输出结果
std::cout << "平均查找长度: " << avgSearchLength << std::endl;
return 0;
}
```
在上面的代码中,我们首先定义了一个二叉查找树的节点结构。然后使用`insert`函数向树中插入节点。接着,我们实现了`countNodes`函数来计算节点的个数,`depth`函数来计算树的深度。最后,通过调用`averageSearchLength`函数,我们可以计算出二叉查找树的平均查找长度。在示例代码中,我们插入了一些节点,并输出了计算结果。你可以根据自己的需求修改代码来适应不同的场景。
阅读全文