注册 登录
编程论坛 数据结构与算法

二叉排序树删除结点问题

不同认为 发布于 2015-12-12 12:33, 3804 次点击
比如只有一个结点,左子树为空,  s=p;p=p-r;free(s),这样是怎么实现把右子树的值复制到要删除的那个结点上
6 回复
#2
林月儿2015-12-12 20:57
s=p;p=p-r;free(s),

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

断章取义大婶也做不到
#3
不同认为2015-12-12 22:12
回复 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这个结点删除么
#4
林月儿2015-12-13 20:44
以下是引用不同认为在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操作转嫁子树
#5
不同认为2015-12-13 21:08
回复 4楼 林月儿
只有本站会员才能查看附件,请 登录
我觉得应该长这样才对
#6
不同认为2015-12-13 21:20
回复 4楼 林月儿
实在想不清怎么删除的
#7
不同认为2015-12-14 20:43
回复 4楼 林月儿
哪个代码体现出p的原结点通过q删除了
1