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

17|红黑(R-B)树:和平衡二叉树有什么不同?

你好,我是王健伟。
上次我和你分享了“平衡二叉树”这个话题,引出了“平衡性调整”的概念。主要目的是让这棵二叉树左右看起来比较“平衡”,不出现左子树很高、右子树很矮,或者左子树很矮、右子树很高的情形。这样,在进行节点的查找、插入、删除等操作时效率会比较高。
但这同时也带来了缺点——在插入和删除节点时,为了调整平衡,必须对树中的节点进行旋转,从而在一定程度上影响程序的执行效率。
平衡二叉树的一条重要性质是“任一节点的左子树和右子树的高度之差不超过 1”。这里引入一个“非严格平衡二叉树”的概念。
非严格平衡二叉树指的是不完全符合前面平衡二叉树的定义,或者说并不是一种严格意义上的平衡二叉树。但这种二叉树最小高度仍旧在 (n 代表节点数)附近,或者说,查找操作的时间复杂度仍旧为 O() 。所以,我们仍旧可以认为这种二叉树是一种平衡二叉树。这就引出了这节课要讲解的“红黑树”。
首先一起看一看红黑树的基本概念。

什么是红黑树?

红黑树(Red-Black Tree),简称 R-B 树,是一种高效的二叉查找树,由 Rudolf Bayer 在 1972 年发明的,当时被称为“对称 / 平衡二叉 B 树”,后来在 1978 年由 Leo J. Guibas 和 Robert Sedgewick 修改为“红黑树”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

红黑树是一种高效的自平衡二叉查找树,通过引入颜色标记和特定的插入、删除规则,减少了平衡调整的频率,保持了树的相对平衡。红黑树的节点有红色和黑色之分,具有四个性质,包括根节点为黑色、叶子节点为黑色空节点、相邻节点不能同时为红色、以及左右子树的黑高度相同。相比于AVL树,红黑树在插入和删除操作时维护平衡的成本较低,因此在频繁进行插入和删除操作时具有更高的效率。红黑树的高度大约为2log2n,在执行效率上与AVL树相差不大,甚至更高。文章还提供了红黑树的基础实现代码,并强调了红黑树在频繁进行插入和删除操作时的高效性。下节课将深入探讨红黑树插入操作后的平衡性调整以及其实现代码。文章最后提出了课后思考问题,鼓励读者分享自己的经验,并邀请他们分享课程给更多朋友一起学习。

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

全部留言(1)

  • 最新
  • 精选
  • HH🐷🐠
    🌝java 工具类 HashMap 就用到了红黑树, 防止树退化成链表。
    2023-12-26归属地:广东
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部