二叉排序树的实现和查找

本文介绍了一种通过依次插入方式建立二叉排序树的方法,并实现了在该树中查找特定元素的功能。文章提供了完整的C++代码示例,包括插入操作、树的创建过程以及查找算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 题目:二叉排序树的实现和查找

二叉排序树中,根节点的左子树都小于根节点,右子树都大于根节点(这里没有包含等于的情况,若要包含等于,只需指定等于方向,然后改一下递归的判断条件即可)

        采用依次插入的方式建立二叉排序树

void insert(tree *&p,int n)
{
	if(p==NULL)
	{
		p=new tree;
		p->data =n;
		p->l =NULL;
		p->r =NULL;
		return ;
	}
	else
	{
		if(n<p->data )
			insert(p->l ,n);
		else if(n>p->data )
			insert(p->r ,n);
	}

}

在查找时,也是通过比较当前节点与所求节点的大小来判断递归走向

int time=0;
int flag=0;
void serch(tree *p,int m)
{

	if(flag==0)       //还未找到 

        time++;

	if(p==NULL)return ;	

	if(p->data ==m)      //已找到,time不再计数 
	{
		flag=1;
		return ;
	}
	else if(m<p->data )
		serch(p->l ,m);
	else 
		serch(p->r ,m);
}


完整代码:

#include<iostream>
using namespace std;
typedef struct Tree
{
	int data;
	struct Tree *l;
	struct Tree *r;
}tree;
void insert(tree *&p,int n)
{
	if(p==NULL)
	{
		p=new tree;
		p->data =n;
		p->l =NULL;
		p->r =NULL;
		return ;
	}
	else
	{
		if(n<p->data )
			insert(p->l ,n);
		else if(n>p->data )
			insert(p->r ,n);
	}
}
tree *creat(int a[],int n)
{
	tree *p=NULL;
	for(int i=0;i<n;i++)
		insert(p,a[i]);
	return p;
}
int flag=0;
void serch(tree *p,int m,int &time)   //这里本来是把time弄成全局变量的,但是交上去报ce了,所以干脆弄成引用传参
{
	if(flag==0)//还未找到 
	if(p==NULL)return ;
	time++;
	if(p->data ==m)//已找到,time不再计数 
	{
		flag=1;
		return ;
	}
	else if(m<p->data )
		serch(p->l ,m,time);
	else 
		serch(p->r ,m,time);
}
int main()
{
	int n;
	cin>>n;
	int a[n];
	for(int i=0;i<n;i++)
	cin>>a[i];
	tree *l=creat(a,n);
	int m;
	cin>>m;
	int time=0;
	serch(l,m,time);
	if(flag==1)cout<<time;
	else cout<<"-1";
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值