排序二叉树BST的基本操作(2)前驱,后继,删除

本文详细介绍了在排序二叉树BST中进行删除操作的三种策略,包括使用前驱或后继节点替换、《CLRS算法导论》中的方法,并分别讨论了叶节点、单子节点及双子节点的情况。删除操作需保持BST的性质,即中序遍历升序。代码实现中,涉及节点结构体的修改和递归删除过程。
摘要由CSDN通过智能技术生成

前文中写了基本操作中的插入,查找,最大节点,最小节点。本文主要写如何进行删除。

删除的最重要的原则是,删除后依然要维护BST的性质,也就是说,中序遍历后为升序。 删除的思路有三个。 


思路一

先理解前驱和后继的含义。

节点key的前驱,就是中序遍历时,比key小的所有节点中最大的那个节点。

节点key的后继,就是中序遍历时,比key小的所有节点中最大的那个节点。

容易看出,节点key的前驱一定没有右儿子,可能有左儿子。反证很容易。如下图,节点10的前驱8可能有左儿子,可能没有左儿子。

 

容易看出,节点key的后继一定没有左儿子,可能有右儿子。反证很容易。如下图,节点10的后继12可能有右儿子,可能没有右儿子。


假定要删除的节点为key,那么要删除key可以用key的前驱替换key也可以用key的后继替换key。

第一种思路,优先用key的前驱替换key,如果key没有前驱,则用key的后继替换key。

    首先,如果key的前驱不存在,后继也不存在。

    则key是叶结点,直接删就行。

    其次,如果key的前驱存在。

要做到删除p并且不丢掉p的左儿子并且依然维护BST的

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值