码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-12-01 22:50:18      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

 

完整代码:插入,查找,删除

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;

  

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

标签:

原文地址:http://www.cnblogs.com/Running-Time/p/5011529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!