`
gaojingsong
  • 浏览: 1202707 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【红黑树介绍】

阅读更多

红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

性质1. 节点是红色或黑色。

性质2. 根节点是黑色。

性质3 每个叶节点(NIL节点,空节点)是黑色的。

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

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

这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。



 

 

插入节点的关键是:

插入新节点总是红色节点

如果插入节点的父节点是黑色, 能维持性质

如果插入节点的父节点是红色, 破坏了性质. 故插入算法就是通过重新着色或旋转, 来维持性质



 

 

删除节点的关键是:

如果删除的是红色节点, 不破坏性质

如果删除的是黑色节点, 那么这个路径上就会少一个黑色节点, 破坏了性质. 故删除算法就是通过重新着色或旋转, 来维持性质

 

 

包含“双黑”结点显然不符合红黑树的要求,因此必须消除这种情况。出现“双黑”的情况可以分为4种:  

1、双黑结点的兄弟结点是红色的  

2、双黑结点的兄弟是黑色的,并且它的兄弟有两个黑色的子结点  

3、双黑结点的兄弟是黑色的,并且,它的兄弟的左、右子结点分别是红色和黑色  

4、双黑结点的兄弟是黑色的,并且,它的兄弟的右子结点是红色的  

很显然,上述四种情况包括了可能的所有状况。  

处理双黑结点的基本思想是进行“色彩补偿”。换言之,将邻近的红色结点变为黑色,同时,此双黑结点也“还原”为黑色。  

  • 大小: 95.1 KB
  • 大小: 101.8 KB
0
3
分享到:
评论

相关推荐

    平衡搜索树包括平衡二叉搜索树和红黑树介绍

    主要包含平衡搜索树中的平衡二叉搜索树红黑的介绍,代码嵌入其中

    有关红黑树的算法研究

    #### 三、左倾红黑树介绍 文档提到的“左倾红黑树”(Left-Leaning Red-Black Trees, LLRB Trees)是红黑树的一种简化变体,旨在进一步降低代码的复杂度。具体来说,左倾红黑树将所有红色链接都保持向左倾斜,这种...

    红黑树java操作代码 红黑树是java里面遍历性能最好数据结构

    下面将详细介绍红黑树的概念、性质以及如何在Java中实现它。 **1. 红黑树的概念** 红黑树是由Rudolf Bayer在1972年提出的,它是一种特殊的二叉查找树,每个节点都带有颜色属性,可以是红色或黑色。它的主要目标是在...

    红黑树算法及其应用_高庆.pdf

    红黑树的定义、优点、基本操作及算法将在下面详细介绍。 红黑树的定义 红黑树是一棵二叉查找树,如果满足以下性质,则称为红黑树: 1. 每个结点或是红色的,或是黑色的(增加一位表示颜色的存储位)。 2. 每个叶...

    红黑树与区间树算法实现

    `csdn-红黑树与区间树.doc`文档可能包含了关于这两种数据结构的详细理论介绍和实验步骤。`IntervalTree.exe`和`RedBlackTree.exe`是编译后的可执行文件,可以直接运行以测试和验证代码的正确性。 总的来说,这个...

    红黑树的C++实现

    - 《算法导论》第三版详细介绍了红黑树的理论基础和操作细节。书中通过一系列的案例分析和证明,解释了如何保持红黑树的平衡以及为什么这些操作能保证O(log n)的时间复杂度。 红黑树是数据结构和算法领域中的一个...

    红黑树的算法实现和改进

    论文详细介绍了红黑树的插入操作。当新节点插入时,首先将其标记为红色,然后通过一系列旋转和重新着色操作来保持红黑树的性质。插入操作可能涉及的旋转包括左旋、右旋和双旋。 删除操作是红黑树中最复杂的部分,...

    红黑树、AA树介绍

    ### 红黑树与AA树介绍 #### 红黑树(RB-Tree) **红黑树的目的:** 红黑树(Red-Black Tree)的设计目的是为了在保证树的平衡性的同时,降低构建和维护这种平衡二叉查找树的成本。在实际应用中,红黑树是一种非常...

    java-红黑树-代码实现(一)

    总结来说,这篇博客和提供的Java代码旨在介绍如何在Java中实现红黑树这一数据结构。通过理解和实现红黑树,开发者可以更好地掌握高级数据结构及其在实际问题中的应用,这对于提升编程能力和优化算法效率至关重要。

    根据随机生成的数构造红黑树的代码(C++)

    根据提供的文件信息,本文将详细解释如何使用C++实现基于随机生成数字构建红黑树的过程。主要内容包括:红黑树的基本概念、构建红黑...通过本篇文章的介绍,希望能够帮助读者更好地理解红黑树的工作原理及其实现细节。

    中科大红黑树插入算法实验报告

    ### 中科大红黑树插入算法实验报告 #### 一、背景介绍 红黑树(Red-Black Tree,简称RBT)是一种自平衡的二叉查找树,它通过确保树的高度始终保持在对数级别来保证查找操作的时间复杂度为O(log n)。红黑树在各种...

    红黑树很好的学习资料

    通过上述内容的介绍,我们可以看到红黑树作为一种高效的自平衡二叉搜索树,在算法和数据结构的学习中占有极其重要的地位。它不仅在理论上具有很高的研究价值,在实际应用中也有着广泛的应用场景,如数据库索引、符号...

    红黑树基础介绍及手动实现.zip

    红黑树(Red-Black Tree)是一种自平衡的二叉查找树。在红黑树中,每个节点包含一个颜色属性,可以是红色或黑色。通过对任何一条从根到叶子的路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出...

    自己写的红黑树的实现代码

    本篇通过分析给出的代码片段,详细介绍了红黑树的基本概念以及其实现细节。红黑树作为一种高效的数据结构,在实际应用中非常广泛,尤其是在需要频繁插入和删除操作的场景下。通过对红黑树的理解和实现,能够帮助...

    一种高效二叉查找树---红黑树

    本文将重点介绍一种自平衡二叉查找树——红黑树(Red-Black Tree),探讨其定义、构建方法以及查找效率。 #### 二、红黑树定义 红黑树是一种特殊的二叉查找树,通过对树的颜色编码来保持树的平衡,从而确保任何操作...

    红黑树_算法详解_算法导论_20130505【for_wind】

    (不需要资源分,不能修改上次的,只好重传了...红黑树算法(算法导论) 详解 【for_wind】,介绍了红黑树性质,详细分析了红黑树旋转,插入,删除等基本操作。其中算法的伪代码和算法导论中一致。 个人总结的,分享了。

    彻底搞懂红黑树1

    下面是对红黑树的详细介绍和分析。 红黑树的定义和历史 红黑树的概念最早由 Rudolf Bayer 在 1972 年提出,称为“对称二叉 B 树”。后来,Leo J. Guibas 和 Robert Sedgewick 在 1978 年的一篇论文中将其命名为...

    数据结构相关面试题:关于红黑树内容的相关介绍

    数据结构相关面试题:关于红黑树内容的相关介绍。红黑树是 1972 年发明的,称为对称二叉 B 树,1978 年正式命名红黑树。主要特征是在每个节点上增加一个属性表示节点颜色,可以红色或黑色。红黑树和 AVL 树类似,都...

    红黑树 区间树实验报告

    通过以上对红黑树和区间树的详细介绍,我们可以看到这两种数据结构各有特点,适用于不同的应用场景。红黑树因其自平衡的特性,在需要频繁更新数据的同时保持高效的操作性能方面具有明显优势;而区间树则在处理区间...

Global site tag (gtag.js) - Google Analytics