Skip to content

红黑树

Red-black tree

用节点颜色和路径黑高不变量保持近似平衡的二叉搜索树。

条目类型
模型

形式陈述

红黑树是带颜色的二叉搜索树,常用不变量为:根黑;空叶哨兵黑;红节点的孩子均黑;从任一节点到其后代空叶的每条路径含相同黑节点数。于是任一路径长度至多最短路径的两倍,高度不超过 2log2(n+1)。插入和删除先按 BST 操作,再用常数次或 O(logn) 次重着色与旋转恢复不变量。

直觉

红黑树用黑节点提供粗粒度的完美平衡骨架,允许红节点在黑层之间插入有限松弛。局部颜色约束保证任意根到叶路径黑节点数相同,并禁止连续红节点,使松弛不会累积成长链:最短路径可以全黑,最长路径至多在每两个黑节点间插一个红节点,因此高度至多约为 2log2(n+1)。插入删除后的旋转保持二叉搜索次序,重新着色修复黑高与红红冲突。

红红冲突、旋转换色与黑高
例子与边界

插入新节点通常先着红色,避免立即改变所有根到叶路径的黑高;若父节点也红,则根据叔节点颜色重着色或旋转。删除黑节点更复杂,因为会造成一单位“黑高亏欠”:修复根据兄弟及其孩子的颜色选择重着色和旋转,要么在当前层消除亏欠,要么把它向父节点上移,直到到达根或被某个兄弟情形吸收。红黑树不是每个节点左右高度差至多一,那是 AVL 条件。不同教材对根是否必须黑、哨兵表示等约定略有差异,但高度结论等价。旋转本身不改变中序键序。

颜色规则的叶子通常包括统一的黑色 NIL 哨兵,而非只看真实节点;漏计会使黑高证明错误。旋转本身不自动恢复全部性质,必须与颜色更新配套;实现还需维护父指针和根颜色。

推论与应用

红黑树建立在二叉搜索树次序和平衡搜索树目标上,给最坏 O(logn) 查找、插入与删除。若节点再保存可由孩子合并的摘要,旋转必须同步重算;通用规则见搜索树增强,维护子树大小并支持 rank/select 的具体接口见顺序统计树

语言标准库的有序 map/set 常采用红黑树,是因为它在二叉指针 RAM 中兼顾最坏界与更新常数。B 树则以多路节点和占用率适配外存块,把代价写成 I/O 次数;它不是给红黑树换一种颜色或简单增大分支度。增广字段、外存布局与红黑平衡分别承担不同问题。

参考资料
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
  • Robert E. Tarjan, Data Structures and Network Algorithms, SIAM, 1983,Chs. 1–6。
关系图谱3 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:分类

分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系