当前位置:首页 > 经验 >

红黑树一定是平衡二叉树吗(红黑树是一个平衡的二叉排序树)

来源:原点资讯(www.yd166.com)时间:2022-11-14 14:51:45作者:YD166手机阅读>>

红黑树是一种半平衡的二叉搜索树,它放弃了二叉搜索树的绝对平衡,换来了较为简单的可维护性,使得二叉搜索树插入新数据,以及搜索数据时,都具有不错的搜索性能。

之所以说红黑树是一种半平衡的二叉搜索树,是因为红黑树中所有叶子节点的深度相差不会超过一倍。为什么呢?在解答这个问题之前,先来看看红黑树的几条特性:

  1. 所有节点要么是红色,要么是黑色
  2. 根节点必须是黑色
  3. 所有叶子(NULL,or NIL)节点都是黑色的
  4. 红色节点的两个子节点必须是黑色(不能有连续的红色节点)
  5. 从根节点到任意叶子节点,黑色节点的数目是相等的

只要二叉搜索树符合以上 5 条性质,它就是红黑树。事实上,提出这 5 条性质的目的就是为了获得红黑树的“所有叶子节点的深度相差不会超过一倍”这个特性。请看下图:

红黑树一定是平衡二叉树吗,红黑树是一个平衡的二叉排序树(5)

叶子节点最浅的路径必定出现在全是黑色节点的路径,最深的路径必定既有黑色节点,又有红色节点。性质5要求所有路径的黑色节点数目相等,所以对比叶子节点的最深路径和最浅路径时,只需考虑最深路径中的红色节点。性质4要求路径中不能出现连续的红色节点,所以最深的路径必定是红黑节点相间的,这就解释了为什么叶子节点最深的路径最多是最浅的路径的 2 倍。

如果插入和删除操作都遵循红黑树的 5 条规则,那么这个树就会始终保持是一个红黑树,即一个半平衡树,也就能维持树的插入和查询时的优异性能。之所以这么费尽心思的维护一个红黑树,是因为实践证明红黑树的这些规则遵循起来是相对简单的。

树节点的左旋和右旋

虽然红黑树的几条规则看来比较容易遵循,但是在使用C语言编程实现时,还是有些繁琐的。向红黑树插入数据时,一般分为两个步骤,首先把红黑树当作一棵普通的二叉搜索树插入数据,然后再进行旋转变换以及重新着色的操作,调整二叉树仍然是一个红黑树。

应该明白,红黑树也是一棵二叉搜索树,所以二叉搜索树的性质红黑树也应遵循。在向红黑树插入数据后的变换和重新着色操作中,着色显然不会影响二叉搜索树的性质,“红黑色”只是节点的一个标记而已,它不影响节点记录的数据,也不影响节点间的相对关系。真正改变树结构的是“旋转”操作,应该尽力避免会破坏二叉搜索树性质的操作,所以人们定义了“树节点的左旋和右旋”,如下图:

红黑树一定是平衡二叉树吗,红黑树是一个平衡的二叉排序树(6)

树节点的左旋和右旋均不改变二叉搜索树的性质,β始终介于 A、B之间。@Sun_TTTT 的动图更清晰一点,清楚的反应了左旋和右旋的特点:

红黑树一定是平衡二叉树吗,红黑树是一个平衡的二叉排序树(7)

右旋:

红黑树一定是平衡二叉树吗,红黑树是一个平衡的二叉排序树(8)

栏目热文

红黑树与平衡二叉树的区别(红黑树平衡树对比)

红黑树与平衡二叉树的区别(红黑树平衡树对比)

红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。简单说就是可用于二分查找的(二叉查找树),且高度是平衡的(...

2022-11-14 14:54:56查看全文 >>

红黑树二叉树的区别(红黑树和平衡二叉树区别)

红黑树二叉树的区别(红黑树和平衡二叉树区别)

很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不敢下笔。于是在重新看了很多篇文章和资料之后,决...

2022-11-14 14:11:33查看全文 >>

红黑树的高度和深度区别(红黑树的原理动态图)

红黑树的高度和深度区别(红黑树的原理动态图)

专注于Java领域优质技术,欢迎关注作者:JasonGaoH之前在公司组内分享了红黑树的工作原理,今天把它整理下发出来,...

2022-11-14 14:34:32查看全文 >>

红黑树与b+树区别(红黑树解决什么问题)

红黑树与b+树区别(红黑树解决什么问题)

树的定义树是包含n(n>1)个结点,n-1条边的有穷集,其中:(1)每个元素称为结点;(2)有一个特定的结点称为根...

2022-11-14 14:55:20查看全文 >>

红黑树和平衡二叉树的优缺点(红黑树为什么是平衡二叉树)

红黑树和平衡二叉树的优缺点(红黑树为什么是平衡二叉树)

1 引言预防针:红黑树本来就是基本算法中的难点,所以看此文时建议先有点预备心理或知识铺垫,没接触过RBT而直接看此文的话...

2022-11-14 14:09:12查看全文 >>

有序树和二叉树的区别(二叉判定树和二叉排序树的区别)

有序树和二叉树的区别(二叉判定树和二叉排序树的区别)

树这些基本的东西必须了解一下!数据结构之树的一些事儿树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据...

2022-11-14 14:19:14查看全文 >>

马拉松赛前一个月怎么训练计划(马拉松赛前一周怎么安排)

马拉松赛前一个月怎么训练计划(马拉松赛前一周怎么安排)

2019宜昌国际马拉松暨全国马拉松锦标赛(宜昌站),将于10月27日上午7:30在湖北宜昌市鸣枪。宜昌国际马拉松创办于2...

2022-11-14 14:25:32查看全文 >>

马拉松赛前两个月训练计划(马拉松赛前一月训练表)

马拉松赛前两个月训练计划(马拉松赛前一月训练表)

想要跑得好,科学备战不能少!撰文/柳条编辑/柳条出品/马孔多跑步研究室下个月11月,马拉松比赛将进入一个高峰期,数场上万...

2022-11-14 14:23:44查看全文 >>

马拉松赛前需要做好哪些准备工作

马拉松赛前需要做好哪些准备工作

关注慧跑,助您轻如羽、跑无伤无论是业余跑者,还是精英马拉松运动员,要想突破自己,实现PB,都必须进行一个阶段完整的周期训...

2022-11-14 14:11:01查看全文 >>

马拉松赛前四周训练计划(马拉松赛前一月训练表)

马拉松赛前四周训练计划(马拉松赛前一月训练表)

也许面对马拉松赛已经坚持了数个月的低中高负荷练习,但最终的调整仍占据影响实际成绩的大多数。经过漫长的训练之后,正式赛期倒...

2022-11-14 14:25:58查看全文 >>

文档排行