0
点赞
收藏
分享

微信扫一扫

SWUST OJ 1011: 二叉排序树的实现和查找

题目描述

按照给定的关键字集合,建立二叉排序树。在建立的二叉排序树上查找指定的关键字,查找成功,输出找到该关键字比较的次数;查找不成功,输出-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;
}

注意

该程序仅供学习参考!

举报

相关推荐

0 条评论