C语言实现:二叉排序树结点的删除

C语言实现:二叉排序树结点的删除,第1张

else if((t)->lchild==NULL)
(t)=(t)->rchild;
else if((t)->rchild==NULL)
(t)=(t)->lchild;
你确定你这个没有写错???左右孩子节点,都为空了你怎么还进入想进入进去?估计你是这样想的。。。但是安装你这个代码,只要左(右)孩子节点为空,你就直接把这个节点该删了,能不出错?把一个空的孩子节点指向该节点

一开始检查该树的根节点是否在删除范围内,如果在则检查它的子树和右子树,对于左子树而言,如果根节点还在范围内,删除该左子树跟节点以及它的右子树,继续向左检查,直到子树的跟节点不再范围内为止,然后子树向下和它的右子树检查,如果右子树跟在范围内,则删除右子树跟和它的右子树,然后子树的右子树连接到它原始右子树的左子树,直到为跟节点为止,对于该树的右子树而言,只需使用同样方法反过来即可,最后全部子树处理好了之后,对跟节点进行处理,只需删除根节点然后重新建立二叉查找树,这个方法的时间复杂度是O(h),其中h代表树的高度


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13362644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存