红黑树的概念
概念定义
红黑树是一种二叉搜索树,每个节点增加一个存储位代表该节点的颜色。节点的颜色可以是红色或黑色。通过对任何一条根到叶子的路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。
红黑树是被多条规则束缚的二叉搜索树,通过这些规则,可以保证红黑树没有一条路径会比其他路径长出两倍,并且保持其相对平衡。
红黑树的规则
- 每个节点不是黑色的就是红色的。
- 根节点必须是黑色的。
- 如果一个节点是红色的,则它的两个孩子节点必须是黑色的,也就是说任意一条路径上不会出现连续的红色节点。
- 对于任意的一个节点,从该节点到其所有的 NULL 节点的简单路径上,均包含着相同数目的黑色节点。
《算法导论》补充了一个知识点:每个叶子节点(NULL)都是黑色的。这里所指的叶子节点不是传统意义上的叶子节点,而是我们所说的空节点,有些书籍上也把 NULL 叫做外部节点。NULL 是为了方便准确地标志所有路径。



最长路径不超过最短路径的两倍
由规则 4 可以知道,每条路径上有着数量相同的黑色节点。在极端场景下,一条路上全都是黑色节点,最短路径其实就是一条路上全是黑色节点,我们将最短路径的长度记作 bh。

结合规则 2 和规则 3,一条路上不会出现连续的红色节点,所以最长路径应该是一红一黑交织组成,因此最长路径的长度是 2bh。

根据红黑树的规则,一般情况下的红黑树的路径是由数量不等的红黑节点组成的。假设红黑树一条路径的长度为 h,所以 bh <= h <= 2bh,即红黑树的最长路径不会是最短路径的两倍。
效率问题
假设红黑树的节点个数为 N,最短路径的长度为 h,所以可知:2^h - 1 <= N < 2^(2*h) - 1,由此可以推出 h 大约等于 logN,也就是红黑树查找的效率最差也是 2 * logN,时间复杂度终归还是 O(log(N))。
红黑树的表达相对 AVL 树要更抽象一些,AVL 树可以根据高度更加直观地看出树的平衡,而红黑树则是需要根据四条规则的颜色进行约束,间接地实现了近似平衡。他们的效率都是同一档次的,但是相对而言,插入相同数量的节点,红黑树的旋转次数变得更少了,因为它对平衡的把控并不是那么严格。


