您的位置:首页 > 其它

二叉搜索树(排序二叉树)

2015-12-01 22:25 253 查看
完整代码:插入,查找,删除

struct BST {
int val;
BST *lch, *rch;
BST *insert(BST *p, int x) {
if (p == NULL)  {
BST *t = new BST;				//new出来的不是指向NULL的
t->val = x;
t->lch = t->rch = NULL;
return t;
}
if (x <= p->val)    p->lch = insert (p->lch, x);
else    p->rch = insert (p->rch, x);
return p;
}
bool find(BST *p, int x)   {
if (x == p->val)    return true;
else if (p == NULL) return false;
else if (x <= p->val)    {
return find (p->lch, x);
}
else    {
return find (p->rch, x);
}
}
BST *remove(BST *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)    {		//如果需要删除的结点没有左儿子,那么把右儿子提上去
BST *t = p->rch;
delete p;
return t;
}
else if (p->lch->rch == NULL)   {	//如果需要删除的结点的左儿子没有右儿子,那么把左儿子提上去
BST *t = p->lch;
t->rch = p->rch;
delete p;
return t;
}
else    {							//以上两种情况不满足,把左儿子子孙中值最大的结点提上去
BST *t = p->lch;
while (t->rch->rch != NULL) t = t->rch;
BST *r = t->rch;
t->rch = r->lch;
r->lch = p->lch;
r->rch = p->rch;
delete p;
return r;
}
return p;
}
}bst;


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: