二叉搜索树模版
#include<iostream>
using namespace std;
typedef struct tree
{
tree *l,*r;
int num;
}tree;
tree *creat(int x) //建树
{
tree *t=(tree *)malloc(sizeof(tree));
t->l=0;
t->r=0;
t->num=x;
return t;
}
tree *inster(tree *s,int x) //插入结点
{
if(s==NULL)
{
tree *t=creat(x);
s=t;
}
else
{
if(x<=s->num)
s->l=inster(s->l,x);
else
s->r=inster(s->r,x);
}
return s;
}
tree *findmin(tree *s) //找tree的最小值(左子树最左边的为最小值)
{
if(s==NULL)
return NULL;
else if(s->l==NULL)
return s;
else
return findmin(s->l);
}
tree *del(tree *s,int x) //在删除一个结点后,要有一个结点可以承接此结点位置的,要么取被删除结点右子树中最小的那个结点,
{ //要么取其左子树中最大的那个结点
tree *t;
if(s==NULL)
return NULL;
else if(x<s->num)
s->l=del(s->l,x);
else if(x>s->num)
s->r=del(s->r,x);
else
if(s->l&&s->r) //如果两个孩子都存在
{
t=findmin(s->r); //找右子树中最小的那个结点
s->num=t->num;
s->r=del(s->r,s->num);
return s;
}
else //只有一个孩子在,那么直接操作就好
{
t=s;
if(s->l==NULL)
s=s->r;
else if(s->r==NULL)
s=s->l;
free(t);
}
return s;
}
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号