题目描述
按照给定的关键字集合,建立二叉排序树。在建立的二叉排序树上查找指定的关键字,查找成功,输出找到该关键字比较的次数;查找不成功,输出-1.
输入
关键字个数n; 关键字集合; 要查找的关键字;
输出
查找成功输出比较的次数,否则输出-1。
样例输入
12
25 18 46 2 53 39 32 4 74 67 60 11
74
样例输出
4
参考程序
#include<stdio.h>
#include<malloc.h>
int t=0;
int mid=0;
typedef struct Node
{
int num;
Node *lchild,*rchild;
}node;
int InsertBST(node *&p,int k)
{
if(p==NULL)
{
p=(node *)malloc(sizeof(node));
p->num=k;
p->lchild=NULL;
p->rchild=NULL;
return 1;
}
else if(k==p->num) return 0;
else if(k<p->num) return InsertBST(p->lchild,k);
else return InsertBST(p->rchild,k);
}
node * CreateBST(int s[],int n)
{
node *bt=NULL;
int i=0;
while(i<n)
{
InsertBST(bt,s[i]);
i++;
}
return bt;
}
void deal(node *s,int e)
{
t++;
if(s==NULL)
return ;
if(s->num==e)
{
mid=1;
return ;
}
if(e < s->num) deal(s->lchild,e);
else deal(s->rchild,e);
}
int main(void)
{
node *s;
int n,num[100],e;
int i;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&num[i]);
scanf("%d",&e);
s=CreateBST(num,n);
deal(s,e);
if(mid==1)
printf("%d",t);
else
printf("-1");
return 0;
}
注意
该程序仅供学习参考!