本题要求用c语言实现二叉排序树的查找操作。 对于二叉排序树,如下图: 二叉排序树.png 输入样例: 4 1 8 0 9 输出样例: 1 is found 8 is found 0 is not found 9 is not found 其中BSTree结构定义如下: typedef int ElemType; typedef struct BSTNode { ElemType data; struct BSTNode *lchild,*rchild; }BSTNode,*BSTree;
时间: 2024-01-24 21:17:10 浏览: 64
好的,这道题我们可以采用递归的方式实现二叉排序树的查找操作。具体思路如下:
1. 首先判断二叉排序树是否为空,如果是,则返回未找到的结果。
2. 如果不为空,则判断当前节点的值与待查找的值的大小关系。
3. 如果当前节点的值等于待查找的值,则返回找到的结果。
4. 如果当前节点的值大于待查找的值,则在当前节点的左子树中继续查找。
5. 如果当前节点的值小于待查找的值,则在当前节点的右子树中继续查找。
6. 如果左右子树都查找完了还没有找到,则返回未找到的结果。
具体实现可以参考下面的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct BSTNode {
ElemType data;
struct BSTNode *lchild, *rchild;
}BSTNode, *BSTree;
// 插入节点
void insert(BSTree *root, ElemType val) {
if (*root == NULL) {
BSTNode *node = (BSTNode*)malloc(sizeof(BSTNode));
node->data = val;
node->lchild = NULL;
node->rchild = NULL;
*root = node;
}
else if (val < (*root)->data) {
insert(&((*root)->lchild), val);
}
else if (val > (*root)->data) {
insert(&((*root)->rchild), val);
}
}
// 查找节点
void find(BSTree root, ElemType val) {
if (root == NULL) {
printf("%d is not found\n", val);
}
else if (val == root->data) {
printf("%d is found\n", val);
}
else if (val < root->data) {
find(root->lchild, val);
}
else {
find(root->rchild, val);
}
}
int main() {
int n, val;
BSTree root = NULL;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &val);
insert(&root, val);
}
while (scanf("%d", &val) != EOF) {
find(root, val);
}
return 0;
}
```
输入样例:
```
4
1 8 0 9
```
输出样例:
```
1 is found
8 is found
0 is not found
9 is not found
```
阅读全文