C语言实现: 删除二进制排序树节点

电脑杂谈  发布时间:2020-04-10 19:17:46  来源:网络整理

c 二叉排序树_树和二叉树的转换_排序二叉树的建立

C语言实现: 删除二进制排序树节点

struct BSTree()
{
    int data;
        struct BSTree *lchild;
        struct BSTree *rchild;
};
 void deletet(struct BSTree **t)
{
   if(((*t)->lchild==NULL)&&((*t)->rchild==NULL))
          (*t)=NULL;
   else if((*t)->lchild==NULL)
          (*t)=(*t)->rchild;
   else if((*t)->rchild==NULL)
          (*t)=(*t)->lchild;
   else
   {
          struct BSTree *q=(*t),*s=(*t)->lchild;
          while(s->rchild!=NULL)
          {
             q=s;
             s=s->rchild;
          }
         (*t)->data=s->data;
         if(q!=(*t))
               q->rchild=s->lchild;
         else
               q->lchild=s->lchild;
   }
}
在主函数中:
t=search(root,key); //已经找到要删除的结点,为t
deletet(&t); //调用删除结点t的函数

以上代码可以成功删除左右子节点不为空的节点. 无法删除,为什么?

||集合||

树和二叉树的转换_排序二叉树的建立_c 二叉排序树

2 sinat 36147557

1个答案

按喜欢排序

似乎我已经看到一种解释,只有分配的变量可以设置为null. null变量不能设置为null. 我不知道这是不是原因,

排序二叉树的建立_树和二叉树的转换_c 二叉排序树

您可以尝试判断只有左(右)个孩子c 二叉排序树,而清空左(右)个孩子.

|

Chorzen

Chorzen

排序二叉树的建立_c 二叉排序树_树和二叉树的转换

Chorzen回答了猴子-: 看下一个句子,前几个句子您只是将空孩子分配给* t,并且没有执行其他操作

3年前

NeoTalen

NeoTalen回答了monkey-: 是的,除了最后一个条件语句实际上是在树上操作之外,其他三个语句实际上并未修改到树中!

排序二叉树的建立_c 二叉排序树_树和二叉树的转换

3年前

sinat_36147557

猴子,谢谢,但是稍后我考虑了一下,这段代码应该只将t变量设置为NULL,而不是将主函数的相应根节点更改为NULL,这相当于没有实质性的更改. 用于输出. 理解不正确吗?

3年前

如果要添加问题,请编辑问题;问题解决后,请采用答案.

在CSDN问答中c 二叉排序树,严格禁止抄袭和复制答案以达到声望点或其他目的的行为,并且一旦发现该标题,便将其禁止使用. 是时候展示真正的技术了!


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-170932-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...