c++在二叉排序树中查找指定的关键字,并在查找过程中输出查找过程中历经的节点 typedef int KeyType; typedef struct node { KeyType key; struct node *lchild,*rchild; } BSTNode; int ReadData(int a[]); BSTNode *CreatBST(KeyType A[],int n); int SearchBST(BSTNode *bt,KeyType k) ;
时间: 2024-01-09 13:03:19 浏览: 59
下面是 C++ 实现的二叉排序树中查找指定关键字的函数:
```c++
typedef int KeyType;
typedef struct node {
KeyType key;
struct node *lchild,*rchild;
} BSTNode;
// 从数组中读取数据
int ReadData(int a[]);
// 创建二叉排序树
BSTNode *CreatBST(KeyType A[], int n);
// 在二叉排序树中查找指定关键字
int SearchBST(BSTNode *bt, KeyType k) {
BSTNode *p = bt; // 从根节点开始查找
int depth = 1; // 查找深度
while (p != NULL) {
if (k == p->key) { // 找到了
cout << "第 " << depth << " 层:找到节点 " << p->key << endl;
return 1;
} else if (k < p->key) { // 在左子树中查找
cout << "第 " << depth << " 层:节点 " << p->key << ",向左子树查找" << endl;
p = p->lchild;
} else { // 在右子树中查找
cout << "第 " << depth << " 层:节点 " << p->key << ",向右子树查找" << endl;
p = p->rchild;
}
depth++;
}
cout << "未找到节点 " << k << "!" << endl;
return 0;
}
```
其中,`bt` 是待查找的二叉排序树的根节点,`k` 是要查找的关键字。在函数内部,我们使用一个指针 `p` 从根节点开始查找,如果找到了,就输出当前查找深度以及找到的节点;如果没有找到,则输出未找到节点的信息。在查找过程中,我们根据当前节点的值与待查找关键字的大小关系,决定是继续在左子树中查找,还是在右子树中查找。
阅读全文