快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

19|红黑(R-B)树:节点删除后的平衡性调整(一)

你好,我是王健伟。
上次我和你分享了红黑树的概念和基础实现代码,以及向红黑树插入新节点后进行平衡性调整的方法。这次我将继续和你分享另一个重要的话题——从红黑树中删除一个节点后的平衡性调整。
红黑树的删除操作比较繁琐和复杂,所以我建议,如果能不实际删除则不做实际删除,比如将要删除的节点做个“删除”标记这样的解决方案看是否能解决问题。当然,本节课讲述的是如何将节点从红黑树中真正删除。

红黑树删除操作后的平衡性调整及实现代码

从红黑树中删除节点同样会让红黑树失衡,从而需要进行平衡性调整。前面曾经详细讲解过平衡二叉树(AVL)的节点删除操作,分三个主要步骤。
查找要删除的节点。
对节点进行相关的删除操作,注意,这里又分了几种情况。
平衡性调整(旋转)
对于红黑树的节点删除操作,同样分为 3 个主要步骤,而且其中前 2 个步骤与平衡二叉树的节点删除操作相同,实现代码也基本相同,需要注意的就是红黑树中有一个 parent 指针需要正确地指向父节点。而第 3 个步骤的平衡性调整除了进行旋转外还可能根据需要对节点进行变色操作。
首先回顾一下对节点进行删除操作所分的几种情况(这些知识前面已经讲解过)——针对所要删除的节点的子节点个数不同,有如下几种情况需要处理。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

红黑树是一种自平衡的二叉查找树,本文详细介绍了在删除节点后如何进行平衡性调整。文章指出了删除操作的复杂性,并提出了避免实际删除节点的建议。针对不同情况下的节点删除操作,文章给出了具体的处理方法,并通过示例说明了删除节点后的结果。特别强调了删除黑色节点时需要进行平衡性调整,包括旋转和变色操作。通过详细的步骤和示例,帮助读者理解了红黑树节点删除后的平衡性调整过程,为读者深入学习红黑树提供了重要参考。 文章内容详实,适合对红黑树有一定了解的读者深入学习。在删除操作后的平衡性调整中,文章提到了两种情况:删除的是仅有左子树或右子树的黑色节点,以及删除的是黑色的叶子节点。此外,文章还提到了一些调整平衡的经验,如根据左右子树高度进行旋转,以及增减黑高时变换节点颜色的方法。 下节课将继续讨论一种特殊情况,即待删节点的父节点为黑色,兄弟节点也为黑色且没有任何孩子节点。这种情况的平衡性调整会导致被调整部分子树的黑高度减少1,文章提出了读者思考如何解决这一问题。这些内容将有助于读者更深入地理解红黑树的平衡性调整过程。 总的来说,本文通过详细的讲解和示例,为读者提供了深入学习红黑树的重要参考,尤其适合对红黑树有一定了解的读者。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部