| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 724 人关注过本帖
标题:二叉排序树删除节点的操作
只看楼主 加入收藏
wobuzhidao0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-3-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
二叉排序树删除节点的操作
void Delete(Bitree &p)
{//从二叉排序树中删除节点p,并重接它的左或右子树
    if(!p->rchild)//右子树空则只需重接它的左或右字数
    {
        q=p;p=p->lchild;
        free(q);
    }
    else if(!p->lchild)//只需重接它的右子树
    {
        q=p;
        p=p->rchild;
        free(q);
    }
    else//左右字数均不空
    {
        q=p;
        s=p->lchild;
        while(s->rchild)
        {//转左,然后向右到尽头
            q=s;
            s=s->rchild
        }
        p->data=s->data; //s指向被删除节点的前驱
        if(q!=p) q->rchild=s->lchile; //重接*q的柚子树
        else q->lchild=s->lchild;//重接*q的左子树
    }

}
上面红体字部分是什么意思,看不懂
搜索更多相关主题的帖子: 左右 
2012-05-07 13:56
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:10 
这是平衡二叉树的删除节点操作。
如果一个中间节点被删除,那么,需要有一个替代节点,其值最接近这个中间节点。
因此,这个节点为左子树中的最大节点或右子树中的最小节点。
左子树中的最大节点为左子树中右子树的终点;
右子树中的最小节点为右子树中左子树的终点。
在获取替代节点后,如果替代节点的左子树或右子树不为空,需要链接其子树至其父节点。

整个算法基本上就是这样。
2012-05-07 20:00
wobuzhidao0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-3-20
收藏
得分:0 
以下是引用silent_world在2012-5-7 20:00:43的发言:

这是平衡二叉树的删除节点操作。
如果一个中间节点被删除,那么,需要有一个替代节点,其值最接近这个中间节点。
因此,这个节点为左子树中的最大节点或右子树中的最小节点。
左子树中的最大节点为左子树中右子树的终点;
右子树中的最小节点为右子树中左子树的终点。
在获取替代节点后,如果替代节点的左子树或右子树不为空,需要链接其子树至其父节点。

整个算法基本上就是这样。
那个if(!q=p)是说删除点的左子树没有右子树吗,为什么这样表达
2012-05-07 21:21
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
在纸上画图自己分析下  比较好理解
2012-05-07 21:41
wobuzhidao0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-3-20
收藏
得分:0 
刚刚弄明白了,谢谢你们
2012-05-07 21:55
快速回复:二叉排序树删除节点的操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044649 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved