什么是红黑树?

作者&投稿:谷雄 (若有异议请与网页底部的电邮联系)
~

最近研究JDK源码的时候,发现TreeMap和TreeSet底层数据结构是红黑树,当然,TreeSet其实本质上就是Value为一个固定值的TreeMap。在JDK1.8以后,HashMap也用到了红黑树。
那红黑树到底是怎样的一种数据结构呢?相信大家都不是非常了解,我也去翻了好多的相关文章,发现一篇很有趣的漫画,可以帮助大家很快了解红黑树大概是怎样的一种数据结构,有哪些特点。 只是大概的介绍一下红黑树,详细的实现大家还是请参考相关的算法书籍。
以下内容转自: 漫画算法:什么是红黑树?

1.左子树上所有结点的值均小于或等于它的根结点的值。

2.右子树上所有结点的值均大于或等于它的根结点的值。

3.左、右子树也分别为二叉排序树。

下图中这棵树,就是一颗典型的二叉查找树:

1.查看根节点9:

3.由于10 < 13,因此查看左孩子11:

假设初始的二叉查找树只有三个节点,根节点值为9,左孩子值为8,右孩子值为12:

2.根节点是黑色。

3.每个叶子节点都是黑色的空节点(NIL节点)。

4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

下图中这棵树,就是一颗典型的红黑树:

什么情况下会破坏红黑树的规则,什么情况下不会破坏规则呢?我们举两个简单的栗子:
1.向原红黑树插入值为14的新节点:

为了重新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。
下图所表示的是红黑树的一部分,需要注意节点25并非根节点。因为节点21和节点22连续出现了红色,不符合规则4,所以把节点22从红色变成黑色:

但这样并不算完,因为凭空多出的黑色节点打破了规则5,所以发生连锁反应,需要继续把节点25从黑色变成红色:

逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。说起来很怪异,大家看下图:

图中,身为右孩子的Y取代了X的位置,而X变成了自己的左孩子。此为左旋转。

顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。大家看下图:

图中,身为左孩子的Y取代了X的位置,而X变成了自己的右孩子。此为右旋转。

首先,我们需要做的是变色,把节点25及其下方的节点变色:

这时候我们需要把节点13看做X,节点8看做Y,像刚才的示意图那样进行右旋转:

如果想要详细了解红黑树算法,可以参考这篇文章: Java数据结构和算法(十一)——红黑树




STL是什么意思?
STL是standard Template Library标准模板库的英文缩写.它包含有计算机科学领域常用的基本数据结构和基本算法.如果要对一个整形数组int a[10]按递增排序,可以使用sort(a,a+10),sort函数被包含在#include<algorithm>中,在MSDN中有详细的解释.

set是什么意思啊了?
set是计算机科学领域中常见的数据结构,它代表着一组互不相同的元素。具体来说,set通过利用哈希表、红黑树等算法,实现了高效的元素插入和查找。由于其性质与操作的高速度,set被广泛应用于各种场景中,例如最近的代码实现中。set不仅限于单一类型的元素,也可以用于多类型的元素。例如,在Python中,set...

C语言要用什么软件做开发
我不想打击LZ,不过你真的 “还没有不会编的程序” 么?你能用C写伸展树,红黑树,avl树, B-,B+树。。。么?你能用C写个小游戏么? 例如扫雷,贪吃蛇了。。。么?另外C语言开发的,大多是在linux平台上来的。哥们如果有什么情况,可以一起讨论下。我也基本就会C.C++略懂,不太精通。类的...

实现键值对存储(一):什么是键值对存储,为什么
Set( key, value ): 将“value”存储到存储空间中某标示符“key”下。使得我们能够通过调用同样的“key”来访问它。假设“key”下已经有了一些数据,旧的数据将被替换。Delete( key ): 删除存储在“key”下的数据。大部分低层实现都是使用哈希表或者某种自平衡树(比如B-树或者红黑树)。有时候...

c语言会了能做什么呢,现在进软件开发公司还可以不呢?
我不想打击LZ,不过你真的 “还没有不会编的程序” 么?你能用C写伸展树,红黑树,avl树, B-,B+树。。。么?你能用C写个小游戏么? 例如扫雷,贪吃蛇了。。。么?另外C语言开发的,大多是在linux平台上来的。哥们如果有什么情况,可以一起讨论下。我也基本就会C.C++略懂,不太精通。类的...

什么叫做平衡二叉树?
这要涉及到满二叉树与完全二叉树的问题 满二叉树是将一个n层二叉树完全排满的二叉树,第n层有2^n个元素;n层完全二叉树是将n层满二叉树最后一层从后向前依次去处少于2^n个元素;完全二叉树是平衡二叉树的一个特例,平衡二叉树是将完全二叉树的最后一层元素任意排在空位上的一种二叉树。如下图...

二叉树的度是什么意思?
而在查询方面,一些特定类型的算法会根据节点的度来判断二叉树的性质,从而更加高效地完成查询和操作。如何利用节点度来增强二叉树的应用?节点度作为二叉树的一个重要属性,在很多应用中都得到了广泛的应用。例如,二叉搜索树能够通过调整节点度及其位置,使得查询和插入操作更加快速可靠;红黑树和AVL树则能够...

List 、Set、 Map有什么区别和联系
1、List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入...

知树的前序遍历,后序遍历,怎么求中序遍历
(5)同理可以得出,由中序序列和后序序还原二叉树的规则也成立。�(6)在还原过程中,读入序列的顺序也遵循也先根结点,后子树的规律。�3总结�在二叉树的一些应用中,如平衡二叉树、红黑树等,常常要观察二叉树的形态,对其进行判断并调整。根据遍历序列和二叉排序树的...

普莱特查艾是什么意思
与传统数据结构相比,它的插入、删除和查找时间复杂度都比较低。普莱特查艾堆也更容易实现和操作,并且根据优先级处理元素时速度更快。与红黑树相比,普莱特查艾堆的速度更快,并且更节省空间。虽然平衡搜索树能够执行更复杂的操作,但是普莱特查艾堆在大多数数据结构应用中都表现出色。

海港区15952002813: 红黑树(自平衡二叉查找树) - 搜狗百科
磨咳安宫: 红黑树是特殊的AVL树,遵循红定理和黑定理 红定理:不能有两个相连的红节点 黑定理:根节点必须是黑节点,而且所有节点通向NULL的路径上,所经过的黑节点的个数必须相等

海港区15952002813: 红黑树的简介 -
磨咳安宫: 红黑树是一种很有意思的平衡检索树.它的统计性能要好于平衡二叉树(有些书籍根 红黑树 据作者姓名,Adelson-Velskii和Landis,将其称为AVL-树),因此,红黑树在很多地方都有应用.在C++ STL中,很多部分(目前包括set, multiset, map...

海港区15952002813: 红黑树的用途 -
磨咳安宫: 红黑树用在关联数组、字典的实现上.需要的空间比散列表小. 任何键值对应,需要随机存储和键有序的情况都可以用.一. 基本概念 1.红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用...

海港区15952002813: 红黑树在linux内核什么地方 -
磨咳安宫: 红黑树是平衡二叉树的一种,它有很好的性质,树中的结点都是有序的,而且因为它本身就是平衡的,所以查找也不会出现非常恶劣的情况,基于二叉树的操作的时间复杂度是O(log(N)).Linux内核在管理vm_area_struct时就是采用了红黑树来维...

海港区15952002813: 为什么工程中都用红黑树,而不是其他平衡二叉树 -
磨咳安宫: 红黑树和平衡二叉树区别如下:1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单.2、平衡二叉树追求绝对平衡,条件比较...

海港区15952002813: 红黑树和平衡二叉树 区别 -
磨咳安宫: 红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能. 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树中的非常严格的平衡.AVL树的复杂比起红黑树来说简直是小巫见大巫.红黑树是真正的变态级数据结构.

海港区15952002813: 红黑树是怎么回事?百度的解释,我看不懂.谁能给解释一下红黑树的设计思想和这种思想诞生的原因,对应的 -
磨咳安宫: http://blog.163.com/scn_2001_ren/blog/static/69845881200872410163654/

海港区15952002813: 算法导论讲什么 -
磨咳安宫: 讲的全是好东西哦,且听我一一道来:堆排序 快速排序 线性时间中的排序 中值与顺序统计 基本的数据结构 散列表 二叉查找树 红-黑树 扩充的数据结构 动态规划 贪婪算法 分摊分析 B-树 二项式堆 斐波纳契堆 不相交集的数据结构 基本的图算法 最小生成树 单源最短路径 全对的最短路径 最大流 排序网络 矩阵运算 线性规划 多项式与快速傅里叶变换 数论算法 字符串匹配 计算几何学 NP-完备性 近似算法 注:看完这本书之后你就长生不老了.

海港区15952002813: 红黑树与普通的平衡二叉树除了颜色到底有什么区别 -
磨咳安宫: 首先平衡二叉树是特殊的二叉排序树,他的结点元素间存在着偏序关系.其次相对于一般

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网