数据结构之红黑树

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之红黑树相关的知识,希望对你有一定的参考价值。

一:红黑树基本概念

(1)什么是红黑树

红黑树在二叉搜索树基础上,增加了一个域来标识结点的颜色,可以是红色和黑色。

通过对任何一条从根节点到叶子结点的简单路径上的各个结点的颜色的约束,红黑树可以确保没有一条路径能比其他路径长出2倍,也就是最长路径比最短路径的长度最长不超过2倍
在这里插入图片描述
AVL树是一颗严格的平衡二叉树,而红黑树只是近似于平衡,并不是严格平衡

(2)红黑树的性质

一个树如果为红黑树,则满足以下性质

  1. 每个结点要么是红色要么是黑色
  2. 根节点是黑色
  3. 每个空结点(NIL)是黑色
  4. 如果一个结点的是红色的,那么它的孩子是黑色的(这意味着红色的结点是不可能连续存在的
  5. 对于每个结点,从该结点到其所有后代叶子结点的简单路径上,均包含相同数目的黑色结点

(3)为什么要给空结点(NIL)上色?

其实空结点的存在是为了标识路径,因为没有空结点我们可能会忽略部分路径,比如上图中如果去除NIL,看起来就少了几条路径
在这里插入图片描述
而一旦少了路径,其实就会违背上面的第5条性质

同时为了方便处理红黑树代码的边界条件,以及出于节省空间的目的,我们会使用一个哨兵来代替NIL,所以指向NIL的指针都用指向哨兵的指针替换

在这里插入图片描述

(4)为什么最长路径一定不超过最短路径的2倍?

这个问题也是红黑树的核心问题,我们可以进行证明,证明如下

假设有一条最长路径为a1,a2,…,as,还有一条最短路径为b1,b2,…,bt
对于每个结点,从该结点到其所有后代叶子结点的简单路径上,均包含相同数目的黑色结点可知这两条路径的黑色结点的数目相同;再由如果一个结点的是红色的,那么它的孩子是黑色的可知路径中不可能存在重复的连续的红色结点。因此这意味着在极端情况,最短路径b1,b2,…,bt中黑色结点的数目就是t,也就是全黑,而如果要满足结论,那么就意味着在最长路径中最多只能有 ⌊ s − 1 2 ⌋ \\left \\lfloor \\frac{s-1}{2}\\right \\rfloor 2s1个红结点(一旦超出,则不满足结论),同时最长路径的结点数目理应大于最短路径的结点数目,所以黑色结点的数目最少也应该有 ⌈ s + 1 2 ⌉ \\left \\lceil \\frac{s+1}{2}\\right \\rceil 2s+1个,因此

接着利用反证法,题目要让我们证明, s ≤ 2 ∗ t s\\leq 2*t s2t。因此假设 s > 2 ∗ t s> 2*t s>2t这样就有 t ≥ ⌈ s + 1 2 ⌉ ≥ ⌈ 2 t + 2 2 ⌉ = t + 1 t\\geq \\left \\lceil \\frac{s+1}{2}\\right \\rceil\\geq \\left \\lceil \\frac{2t+2}{2}\\right \\rceil=t+1 t2s+122t+2=t+1,显然矛盾,因此可得 s ≤ 2 ∗ t s\\leq 2*t s2t

(5)红黑树效率

以上是关于数据结构之红黑树的主要内容,如果未能解决你的问题,请参考以下文章

C++之红黑树

数据结构之红黑树

二叉树之红黑树(RBTree)

数据结构之红黑树

数据结构之红黑树

0043数据结构之红黑树