没有合适的资源?快使用搜索试试~ 我知道了~
深入理解高级数据结构之红黑树
需积分: 9 1 下载量 173 浏览量
2022-09-11
18:04:56
上传
评论
收藏 1.71MB PDF 举报
温馨提示
试读
11页
目录 一、为什么要有红黑树? 二、什么是“平衡二叉查找树”? 三、红黑树的定义 四、为什么说红黑树是“近似平衡”的? 五、红黑树为什么综合性能好? 六、实现红黑树 1、插入操作的平衡调整 2、删除操作
资源推荐
资源详情
资源评论
目录
一、为什么要有红黑树?
二、什么是“平衡二叉查找树”?
三、红黑树的定义
四、为什么说红黑树是“近似平衡”的?
五、红黑树为什么综合性能好?
六、实现红黑树
1、插入操作的平衡调整
2、删除操作的平衡调整
1. 针对删除节点初步调整
2. 针对关注节点进行二次调整
3、小结
六、红黑树的应用场景
红黑树已经落地的场景
一、为什么要有红黑树?
二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度
跟树的高度成正比,理想情况下,时间复杂度是 O(logn)。
但是,在已经有了性能不错的二叉搜索树,为什么还需要引入红黑树呢?
那是因为,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2n 的情况,从
而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n)。
而且,我们希望树的结构具有关联性,即相邻版本之间,比如说第一次插入,和第二次插入时,
树的结构不能发生太大变化,应该可以经过O(1)次数就可以变化完成。对于AVL树来说,插入是
满足这个条件的,删除却不满足这个条件。
要解决这两个问题,我们需要设计一种平衡二叉查找树,也就是今天要讲的红黑树。
二、什么是“平衡二叉查找树”?
平衡二叉树的严格定义是这样的:二叉树中任意一个节点的左右子树的高度相差不能大于 1。从
这个定义来看,上一节我们讲的完全二叉树、满二叉树其实都是平衡二叉树,但是非完全二叉树
也有可能是平衡二叉树。
1.
2.
3.
4.
5.
平衡二叉查找树不仅满足上面平衡二叉树的定义,还满足二叉查找树的特点。最先被发明的平衡
二叉查找树是AVL树,它严格符合我刚讲到的平衡二叉查找树的定义,即任何节点的左右子树高度
相差不超过 1,是一种高度平衡的二叉查找树。
但是很多平衡二叉查找树其实并没有严格符合上面的定义(树中任意一个节点的左右子树的高度
相差不能大于 1),比如我们下面要讲的红黑树,它从根节点到各个叶子节点的最长路径,有可
能会比最短路径大一倍。
我们学习数据结构和算法是为了应用到实际的开发中的,所以,我觉得没必去死抠定义。对于平
衡二叉查找树这个概念,我觉得我们要从这个数据结构的由来,去理解“平衡”的意思。
发明平衡二叉查找树这类数据结构的初衷是,解决普通二叉查找树在频繁的插入、删除等动态更
新的情况下,出现时间复杂度退化的问题。
所以,平衡二叉查找树中“平衡”的意思,其实就是让整棵树左右看起来比较“对称”、比较
“平衡”,不要出现左子树很高、右子树很矮的情况。这样就能让整棵树的高度相对来说低一
些,相应的插入、删除、查找等操作的效率高一些。
所以,如果我们现在设计一个新的平衡二叉查找树,只要树的高度不比 log2n 大很多(比如树的
高度仍然是对数量级的),尽管它不符合我们前面讲的严格的平衡二叉查找树的定义,但我们仍
然可以说,这是一个合格的平衡二叉查找树。
三、红黑树的定义
红黑树的英文是“Red-Black Tree”,简称 R-B Tree。它是一种不严格的平衡二叉查找树,我前
面说了,它的定义是不严格符合平衡二叉查找树的定义的。那红黑树究竟是怎么定义的呢?
顾名思义,红黑树中的节点,一类被标记为黑色,一类被标记为红色。除此之外,一棵红黑树还
需要满足这样几个要求:
每个结点要么是红的要么是黑的。
根结点是黑的。
每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;
如果一个结点是红的,那么它的两个儿子都是黑的。
对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。
1.
2.
四、为什么说红黑树是“近似平衡”的?
平衡二叉查找树的初衷,是为了解决二叉查找树因为动态更新导致的性能退化问题。所以,“平
。衡”的意思可以等价为性能不退化。“近似平衡”就等价为性能不会退化的太严重
二叉查找树很多操作的性能都跟树的高度成正比。一棵极其平衡的二叉树(满二叉树或完全二叉
树)的高度大约是 log2n,所以如果要证明红黑树是近似平衡的,我们只需要分析,红黑树的高
度是否比较稳定地趋近 log2n 就好了。
红黑树与AVL树相似,但提供更快的实时有界最坏情况下的插入和删除性能(分别达到最多两轮和
三轮以平衡树),但速度稍慢(但仍为O(log n))查找时间;
红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。这不只
是使它们在时间敏感的应用,如实时应用(real time application)中有价值,而且使它们有在
提供最坏情况担保的其他数据结构中作为基础模板的价值;例如,在计算几何中使用的很多数据
结构都可以基于红黑树实现。
红黑树相对于AVL树来说,牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,整体来说
性能要优于AVL树。
五、红黑树为什么综合性能好?
在《 》 中说过, 红黑树等价于2-3树, 换句话说,对于每个2-3树,都存在至少一算法(第4版)
个数据元素是同样次序的红黑树。在2-3树上的插入和删除操作也等同于在红黑树中颜色翻转和旋
转。这使得2-3树成为理解红黑树背后的逻辑的重要工具,这也是很多介绍算法的教科书在红黑树
之前介绍2-3树的原因,尽管2-3树在实践中不经常使用。
其中2-节点 等价于普通平衡二叉树的节点,3-节点 本质上是非平衡性的缓存。 当需要再平衡
(rebalance)时,增删操作时,2-节点 与 3-节点间 的 转化会吸收不平衡性,减少旋转次数,
使再平衡尽快结束。 在综合条件下,增删操作相当时,数据的随机性强时,3-节点的非平衡性缓
冲效果越明显。因此红黑树的综合性能更优。
继续追根溯源,红黑树的性能优势,本质上是用空间换时间。
六、实现红黑树
红黑树的平衡过程:大致过程就是: 。只要按照遇到什么样的节点排布,我们就对应怎么去调整
这些固定的调整规则来操作,就能将一个非平衡的红黑树调整成平衡的。
一棵合格的红黑树需要满足这样几个要求:
每个结点要么是红的要么是黑的。
根结点是黑的。
剩余10页未读,继续阅读
资源评论
北极象
- 粉丝: 1w+
- 资源: 345
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功