标题:二叉排序树删除结点问题
只看楼主
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
结帖率:57.14%
已结贴  问题点数:20 回复次数:6 
二叉排序树删除结点问题
比如只有一个结点,左子树为空,  s=p;p=p-r;free(s),这样是怎么实现把右子树的值复制到要删除的那个结点上
2015-12-12 12:33
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
s=p;p=p-r;free(s),

=》s=p;p=p->r;free(s);

断章取义大婶也做不到

剑栈风樯各苦辛,别时冰雪到时春
2015-12-12 20:57
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
得分:0 
回复 2楼 林月儿
int Delete(BiTree &p)  
{  
      
    BiTree q, s;  
    if(  !p->lchild&&!p->rchild )   
        p=NULL;  
    else if(!p->lchild)  
    {  
        q=p;   
        p=p->rchild;  
        free(q);  
    }  
    else if(!p->rchild)   
    {  
        q=p;  
        p=p->lchild;      
        free(q);  
    }
像这样,p的指向是改变了,但原来的p地址不是给q了么,这样子有把P这个结点删除么
2015-12-12 22:12
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:20 
以下是引用不同认为在2015-12-12 22:12:12的发言:

int Delete(BiTree &p)   
{   
      
    BiTree q, s;   
    if(  !p->lchild&&!p->rchild )   
        p=NULL;   
    else if(!p->lchild)   
    {   
        q=p;   
        p=p->rchild;   
        free(q);   
    }   
    else if(!p->rchild)   
    {   
        q=p;   
        p=p->lchild;      
        free(q);   
    }
像这样,p的指向是改变了,但原来的p地址不是给q了么,这样子有把P这个结点删除么

你说p指向变了。。。对但不是重点,重点是p代表的结点变了,这里的局部代码对p代表的原结点通过q删除后
接着对p操作转嫁子树

剑栈风樯各苦辛,别时冰雪到时春
2015-12-13 20:44
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
得分:0 
回复 4楼 林月儿
我觉得应该长这样才对
2015-12-13 21:08
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
得分:0 
回复 4楼 林月儿
实在想不清怎么删除的
2015-12-13 21:20
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
得分:0 
回复 4楼 林月儿
哪个代码体现出p的原结点通过q删除了
2015-12-14 20:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460152-1-1.html




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

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