“实现应按操作组合和存储层选择。二叉搜索树提供有序字典的基本比较模型,红黑树把查找、插入和删除都约束在最坏 $O(\log n)$;B 树与B+ 树把高分支节点和块访问用于外存,其中 B+ 树…”
形式陈述 ​
红黑树是带颜色的二叉搜索树,常用不变量为:根黑;空叶哨兵黑;红节点的孩子均黑;从任一节点到其后代空叶的每条路径含相同黑节点数。于是任一路径长度至多最短路径的两倍,高度不超过
直觉
红黑树用黑节点提供粗粒度的完美平衡骨架,允许红节点在黑层之间插入有限松弛。局部颜色约束保证任意根到叶路径黑节点数相同,并禁止连续红节点,使松弛不会累积成长链:最短路径可以全黑,最长路径至多在每两个黑节点间插一个红节点,因此高度至多约为
例子与边界
插入新节点通常先着红色,避免立即改变所有根到叶路径的黑高;若父节点也红,则根据叔节点颜色重着色或旋转。删除黑节点更复杂,因为会造成一单位“黑高亏欠”:修复根据兄弟及其孩子的颜色选择重着色和旋转,要么在当前层消除亏欠,要么把它向父节点上移,直到到达根或被某个兄弟情形吸收。红黑树不是每个节点左右高度差至多一,那是 AVL 条件。不同教材对根是否必须黑、哨兵表示等约定略有差异,但高度结论等价。旋转本身不改变中序键序。
颜色规则的叶子通常包括统一的黑色 NIL 哨兵,而非只看真实节点;漏计会使黑高证明错误。旋转本身不自动恢复全部性质,必须与颜色更新配套;实现还需维护父指针和根颜色。
推论与应用
红黑树建立在二叉搜索树次序和平衡搜索树目标上,给最坏
语言标准库的有序 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。