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

d37db08a03ba1a98d2c67b8f0653a2cf.png

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的函数

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

||集合||

062cb5897cebf2f0863fad02e4df0dd4.png

6df8a713083e355e1648faecc43e2fef.png

1个答案

按喜欢排序

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

f8c9a99a8e47b38907229242d3bdb87f.png

您可以尝试判断只有左(右)个孩子

|

cdb234ea19190d31e6f73aeed545395a.png

cdb234ea19190d31e6f73aeed545395a.png

158714ce4920e5940136169874e7d7ca.png

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

3年前

22891333625f8df29a10734574853872.gif

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

pic1.gif

3年前

b2ee00fad92037143dffe31f22483d3d.png

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

3年前

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

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

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-170932-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值