(转)红黑树

作者&投稿:路欧 (若有异议请与网页底部的电邮联系)
~ 红黑树是平衡二叉树的一种,是目前使用最多的一种树结构。红黑树通过对节点的染色以及巧妙的动态调整,使得树保持适度平衡。

红黑树可以保证:在每次插入或删除操作之后的重平衡过程中,全树的拓扑结构的更新仅涉及常数个节点。尽管在最坏的情况下需要对O(logn)个节点冲染色,但是就分摊意义而言,仅为O(1)个。

红黑树的适度平衡标准:任一节点左、右子树的高度相差不得超过两倍。

红黑树的条件:
(1)树根为黑色
(2)外部节点均为黑色
(3)其余节点若为红色,则其孩子节点必为黑色
(4)从任一外部节点到根节点的沿途,黑节点的数目相等
满足上面四个条件的二叉搜索树,为红黑树。

红黑树与4阶B树之间存在密切的联系,经过适当的转换之后,两者是等价的。

红黑树的插入操作:
(1)在红黑树中查找要插入的节点X,若允许插入节点X,则在该位置插入节点X
(2)节点X染为红色
(3)判断此时红黑树是否满足条件(3),若满足则插入操作完成,否则进行调整

红黑树插入新节点导致的红黑树调整,称为双红修正,其中双红修正有两种情况:RR-1和RR-2。

RR-1 u为黑的情况:
1 ~ 2次旋转,2次染色,调整随之完成
RR-2 u为红的情况:
0次旋转,3次染色,可能导致上层节点的再次双红,需要继续调整,最多O(logn)次

红黑树的删除操作:
(1)找到需要删除的节点X,若有,则删除
(2)判断删除之后的红黑树是否满足条件(3)与(4),若不满足,则进行调整

红黑树删除操作导致的红黑树调整,为双黑调整,双黑调整有四种情况。

(1)BB-1,黑s有红子t:
1 ~ 2次旋转,3次染色,调整完成
(2)BB-2-R,黑s无红子,p红:
0次旋转,2次染色,调整完成
(3)BB-2-B,黑s无红子,p黑:
0次旋转,1次染色,必然会导致再次双黑,但上升一层,继续调整
(4)BB-3,红s:
1次旋转,2次染色,转化为BB-1或者BB-2-R,继续调整

红黑的删除操作的总共耗时不会超过O(logn)次。

参考:
https://www.jianshu.com/p/e136ec79235c
《数据结构第三版》


(转)红黑树
红黑树是平衡二叉树的一种,是目前使用最多的一种树结构。红黑树通过对节点的染色以及巧妙的动态调整,使得树保持适度平衡。红黑树可以保证:在每次插入或删除操作之后的重平衡过程中,全树的拓扑结构的更新仅涉及常数个节点。尽管在最坏的情况下需要对O(logn)个节点冲染色,但是就分摊意义而言,仅为O(1...

红黑树简介
在红黑树中,每一个节点可能具有两种不同的颜色:红色或黑色。红黑树总是满足如下的5个条件:红黑树可以进行旋转、增加节点、删除节点的功能。旋转操作分为左旋和右旋。左旋指原父结点的右叶子节点成为新的父结点,而原父结点成为新父结点的左叶子节点。左旋时,因为节点之间指针发生了变动,原右叶子节点...

红黑树详解
由于父节点22是也是红色节点,因此打破了红黑树的规则(每个红黑树的两个子节点都是黑色),所以必须进行调整,使之重新符合规则。那么我们需要作出怎样的调整才能保证一棵红黑树始终是符合规则的标准红黑树呢?调整有两种方法:“变色”和“旋转”,其中,旋转又分为两种形式:“左旋转”和“右旋转”。为...

什么是红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。树的...

红黑树(Red-black tree)
红黑树 是一种自平衡二叉查找树,典型的用途是实现 关联数组 ,它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的 O(log n ) 时间内做查找,插入和删除,这里的 n 是树中元素的数目。一个由n个节点随机构成的二叉查找树的高度为(log n ).证明如下:而时间复杂度是...

什么是红黑树?
在红黑树的世界里,插入和查找操作就如同一场精密的芭蕾。插入时,从根节点开始,通过左旋和右旋的旋转操作,确保树的平衡,同时维持红黑树的性质。查找过程同样遵循类似的逻辑,通过递归搜索,直到找到目标节点或遍历结束。然而,删除操作则更为复杂,需要考虑三种情况:叶子节点、只有一个子节点和有两个子...

什么是红黑树?
只是大概的介绍一下红黑树,详细的实现大家还是请参考相关的算法书籍。 以下内容转自: 漫画算法:什么是红黑树?1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。下图中这棵树,就是一颗典型的二叉查找...

红黑树旋转规则总结
插入的是红色(因为红黑树的性质中有一条,根节点到任意叶子节点的黑色节点相同,插入红色降低调整概率)①当父节点是黑色,没有问题,直接插入,不会破坏平衡。②当父节点是红色,且叔父同色(父节点和叔叔节点颜色相同),此时只需要变色 变色规则:把父和叔同时变成黑色,祖父变成红色,然后再把祖父...

红黑树的原理
1. 每个节点要么是红色,要么是黑色。2. 根节点是黑色。3. 所有叶子节点都是黑色。4. 如果一个节点是红色的,那么其子节点必须是黑色的。这样可以避免树的深度差异过大,影响平衡。5. 从任一节点到其每个叶子节点的所有路径都包含相同数量的黑色节点。这确保了树的路径长度相对均衡。三、红黑树的...

红黑树和平衡二叉树的区别
红黑树是一种特定类型的二叉树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由RudolfBayer发明的,他称之为"对称二叉B树",它现代的名字是在LeoJ.Guibas和RobertSedgewick于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践...

碾子山区19610572028: 红黑树的树的旋转 -
钦肺延寄: 当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质.为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树种某些结点的颜色及指针结构,以达到对红黑树进行插入、删除结点等操作时,红黑树依然能保持它特有的性质(五点性质).如右图.

碾子山区19610572028: 什么是红黑树 -
钦肺延寄: 红黑树是特殊的AVL树,遵循红定理和黑定理 红定理:不能有两个相连的红节点 黑定理:根节点必须是黑节点,而且所有节点通向NULL的路径上,所经过的黑节点的个数必须相等

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

碾子山区19610572028: 关于算法导论红黑树旋转的问题.
钦肺延寄: 这句的意思是把 y节点 的 左节点 的 父节点 设为 x节点. 建议看着下面那副图13-3理解,第一步是把y设为x的右儿子,第二步是把x的右儿子设为y的左儿子,这样完成了x节点的旋转,然后接下来处理y.首先判断y的左儿子是否存在,如果存在,由于y的左儿子的父节点已经改变了(第二步改变的),所以要改变y的左儿子的父指针,设为x.

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

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

碾子山区19610572028: java 为什么使用hashmap -
钦肺延寄: 首先当我们需要存储数据的时候,动态数组虽然能够自动扩容,但是必须在初始时刻指定初始容量.而对于那些在编译时无法确定具体的数量即动态增长的数据,就需要用到Java集合类了.对于ArrayList 和 LinkedList,还有 Vector它们都有一些...

碾子山区19610572028: 为什么选择红黑树作为底层实现 -
钦肺延寄: 红黑树属于平衡二叉树. 说它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1. 但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n),这有数学证明.所以它算平衡树,只是不严格.不过严格与否并不影响数据结构的复杂度. 红黑树多用于系统底层,oi竞赛中基本不用.

碾子山区19610572028: 红黑树的java实现? -
钦肺延寄: public class TreeNode { public int data; public String color; public TreeNode lchild; public TreeNode rchild; }2.RBTree.JAVA package 第13章_红黑树;/*** @author greatwqs* @date 2009.9.12**/ public class RBTree { TreeNode root;// 建立红黑树 ...

碾子山区19610572028: 模式识别和图像处理中的算法和算法导论中的算法有什么区别 -
钦肺延寄: 模式识别与图像处理中的算法是针对图像识别与分类的,算法作用对象是像素,用于提取特征、识别目标等;而算法导论中的算法针对的是程序本身,是用于改善程序结构与运行速度的,算法导论中几乎包括了所有数据结构的东西,哪种编程语言都能用.

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