基于二叉排序树的查找,根据提示输入参赛队编号(编号类型为int),若查找成功输出查找成功时的平均查找长度ASL;否则,输出“查找失败!”。要求 使用C++编程
时间: 2023-12-03 21:45:40 浏览: 94
以下是基于二叉排序树的查找的C++代码实现:
```cpp
#include <iostream>
using namespace std;
struct TreeNode {
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : data(x), left(NULL), right(NULL) {}
};
void insert(TreeNode*& root, int x) {
if (root == NULL) {
root = new TreeNode(x);
return;
}
if (x < root->data) {
insert(root->left, x);
}
else {
insert(root->right, x);
}
}
int find(TreeNode* root, int x, int level) {
if (root == NULL) {
return -1;
}
if (root->data == x) {
return level;
}
if (x < root->data) {
return find(root->left, x, level + 1);
}
else {
return find(root->right, x, level + 1);
}
}
int main() {
int n;
cin >> n;
TreeNode* root = NULL;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
insert(root, num);
}
int x;
cin >> x;
int level = find(root, x, 1);
if (level == -1) {
cout << "查找失败!" << endl;
}
else {
int sum = 0;
int count = 0;
inorder(root, sum, count);
double asl = (double)sum / count;
cout << "查找成功!ASL为:" << asl << endl;
}
return 0;
}
```
其中,insert函数用于向二叉排序树中插入节点;find函数用于查找指定的节点,并返回该节点的层数;inorder函数用于遍历二叉排序树,计算节点数和层数和,以便计算ASL。
阅读全文