
红黑树的概念
前面我们讲解了一种自平衡二叉搜索树——AVL 树,它可以使每个节点的左右高度差严格保证在 1 之间。由于它更严格平衡,树高度较低,接近于 log₂n,所以它的旋转次数很多,实现相对复杂。除了 AVL 树外还有另一种自平衡二叉搜索树,也是今天我们要讲解的主角——红黑树。红黑树是一种自平衡的二叉搜索树,其由来可以追溯到 1972 年由 Russell J. R. Anderson 和 Robert Sedgewick 提出的研究。与 AVL 树引入平衡因子来控制平衡不同,红黑树通过引入节点的颜色(红色和黑色)来帮助维护二叉搜索树的平衡性。
红黑树的每个节点增加一个存储位来表示节点的颜色,可以是红色或者黑色。通过对任何一条从根到叶子路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出 2 倍,因而是接近平衡的。
红黑树的规则
那么红黑树是如何做到确保没有一条路径会比其他路径长出 2 倍的呢?这得益于红黑树特有的规则:
- 每一个节点不是红色就是黑色。
- 根节点是黑色的。
- 任意一条路径不会有连续的红色节点,也就是说一个节点如果是红色的,那么它的孩子只能是黑色的。
- 对于任意一个节点,从该节点到其所有叶子节点的简单路径上,必须含有数量相同的黑色节点。
这些性质保证了红黑树的高度不会超过 log₂n,从而确保了良好的性能。
下面让我们来看一看一些具体的红黑树:

观察上面的红黑树我们可以发现其每一个节点都符合上述的规则,同时也没有任何路径比其他路径长出两倍,这就是红黑树。
说明: 《算法导论》等书籍上补充了一条每个叶子节点 (NIL) 都是黑色的规则。他这里所指的叶子节点不是传统意义上的叶子节点,而是我们说的空节点,有些书籍上也把 NIL 叫做外部节点。NIL 是为了方便准确地标识出所有路径,《算法导论》在后续讲解实现的细节中也忽略了 NIL 节点,所以我们知道一下这个概念即可。
红黑树如何确保最长路径不超过最短路径的两倍?
由规则 4 可知,从根到叶子节点的每条路径都有相同数量的黑色节点,所以极端场景下,最短路径就是全是黑色节点的路径,假设最短路径长度为 bh(black height)。
由规则 2 和规则 3 可知,任意一条路径不会有连续的红⾊节点,所以极端场景下,最长的路径就是一黑一红间隔组成,那么最长路径的长度为 2*bh。
如下图所示:

综合红黑树的 4 点规则而言,理论上的全黑最短路径和一黑一红的最长路径并不是在每棵红黑树都存在的。假设任意一条从根到叶子节点路径的长度为 x,那么 bh <= h <= 2*bh。
红黑树的效率
假设 N 是红黑树中节点数量,h 最短路径的长度,那么 2^h - 1 <= N < 2^(2*h) - 1,由此推出 ,也就意味着红黑树增删查改最坏也就是走最长路径 ,那么时间复杂度还是 。














