//二叉搜索树的实现,当然也可以使用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也是一样,都是用迭代器的操作*/
二叉搜索树的实现
最新推荐文章于 2024-07-09 16:42:24 发布