二叉搜索树的实现

//二叉搜索树的实现,当然也可以使用set和map实现 
#include<cstdio>
struct node{
	int val;
	node *lch,*rch;
}; 
//插入操作,先判断是比叶子节点的值大还是小 
node *insert(node *p,int x){
	if(p==NULL)
	{
		node *q=new node;
		q->val =x;
		q->rch =q->rch =NULL;
		return q;
	}
	else
	{
		if(x<p->val )
			p->lch =insert(p->lch ,x);
		else
			p->rch =insert(p->rch ,x);
		return p;
	}
}
//查找
bool find(node *p,int x)
{
	if(p==NULL)	return false;
	else if(x==p->val )	return true;
	else if(x<p->val )	return find(p->lch ,x);
	else return find(p->rch ,x);
}
//遍历二叉树
void Oder(node *p)
{
	if(p==NULL)	return ;
	Oder(p->lch );
	printf("%d",p->val );	//前序中序后序遍历只是输出的位置不同 
	Oder(p->rch );
	return ;
 } 
//删除
node *remove(node *p,int x)
{
	if(p==NULL)	return NULL;
	else if(x<p->val )	p->lch =remove(p->lch ,x);
	else if(x>p->val )	p->rch =remove(p->rch ,x);
	else if(p->lch ==NULL)	//把右节点提上来 
	{
		node *q=p->rch ;
		delete p;
		return q;
	}
	else if(p->lch->rch ==NULL)	//这些自己画个图就很好看了 
	{
		node *q=p->lch ;
		q->rch =p->rch ;
		delete p;
		return q;
	}
	else
	{
		node *q;
		for(q=p->lch ;q->rch->rch!=NULL;q=q->rch )
		{
			node *r=q->rch ;
			q->rch =r->lch ;
			r->lch =p->lch ;
			r->rch =p->rch ;
			delete p;
			return r;
		}
		return p;
	}
}




/*这里附上C++STL的set和map的操作
set <int> s;
set<int>::iterator ite;
s.insert(value);
s.find(value);
s.begin();
s.end();
s.erase(value);
s.count(value);

map也是一样,都是用迭代器的操作*/
 



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值