在二叉排序树中查找指定的关键字,并在查找过程中输出查找过程中历经的节点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);
时间: 2023-07-15 14:15:53 浏览: 102
数据结构 二叉排序树的查找
下面是在二叉排序树中查找指定关键字并输出查找历程的C语言代码实现:
```
#include<stdio.h>
#include<stdlib.h>
typedef int KeyType;
typedef struct node {
KeyType key;
struct node *lchild,*rchild;
} BSTNode;
// 读取数据
int ReadData(int a[]) {
int n;
printf("请输入数据个数:");
scanf("%d",&n);
printf("请输入%d个数据:",n);
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
}
return n;
}
// 创建二叉排序树
BSTNode *CreatBST(KeyType A[],int n) {
BSTNode *root=NULL,*p,*q;
for(int i=0; i<n; i++) {
p=(BSTNode*)malloc(sizeof(BSTNode));
p->key=A[i];
p->lchild=p->rchild=NULL;
if(root==NULL) root=p;
else {
q=root;
while(1) {
if(p->key < q->key) {
if(q->lchild==NULL) {
q->lchild=p;
break;
}
q=q->lchild;
}
else {
if(q->rchild==NULL) {
q->rchild=p;
break;
}
q=q->rchild;
}
}
}
}
return root;
}
// 查找关键字并输出查找历程
int SearchBST(BSTNode *bt,KeyType k) {
int depth=1;
while(bt!=NULL) {
if(k < bt->key) {
printf("第%d层:左子树,结点值为%d\n",depth,bt->key);
depth++;
bt=bt->lchild;
}
else if(k > bt->key) {
printf("第%d层:右子树,结点值为%d\n",depth,bt->key);
depth++;
bt=bt->rchild;
}
else {
printf("第%d层:查找成功,结点值为%d\n",depth,bt->key);
return 1;
}
}
printf("查找失败!\n");
return 0;
}
int main() {
int a[100],n;
KeyType k;
BSTNode *root=NULL;
n=ReadData(a);
root=CreatBST(a,n);
printf("请输入要查找的关键字:");
scanf("%d",&k);
SearchBST(root,k);
return 0;
}
```
该代码实现了二叉排序树的创建、关键字的查找以及输出查找过程中历经的节点。其中,ReadData函数用于读取输入数据,CreatBST函数用于创建二叉排序树,SearchBST函数用于查找关键字并输出查找历程。
阅读全文