红黑树Red-black tree

通过颜色约束和局部调整保持搜索树高度受控。

核心约束
路径黑高相同,红节点不能有红孩子。
适用问题
动态有序索引、范围查询与定时事件管理。
边界与取舍
节点指针与旋转维护有成本;增强字段需随修改更新。
8412261014
有效红黑树示意:浅红为红节点,其余为黑节点;省略 NIL 叶子。

常见操作#

n 为节点数,k 为范围查询输出数。

操作时间复杂度条件与说明
查找 / 插入 / 删除O(log⁡n)O(\log n)最坏界;需要维护红黑不变量,比较成本按 O(1)O(1) 计算。
最小 / 最大 / 前驱 / 后继O(log⁡n)O(\log n)从根定位;Linux rb_root_cached 的最左节点读取可为 O(1)O(1)。
有序遍历O(n)O(n)完整迭代所有节点;单步后继的最坏成本与整段遍历的摊还成本不同。
范围枚举O(log⁡n+k)O(\log n+k)先找范围起点,再输出 k 个节点。

时间与空间#

时间复杂度
查找 / 更新最坏 O(log⁡n)O(\log n)
存储空间
O(n)O(n)

增广字段需在链接和旋转后更新;维护成本取决于增广函数。

工程中的应用#

5 个案例 · 附源码
nginx·事件循环release-1.26.3

nginx 事件定时器以到期时间为键放入红黑树,事件循环读取最小键确定等待上限。

附源码片段 · 调度与资源分配
基础原理参考资料

Princeton · RedBlackBST有序操作和范围迭代的成本。

Linux 6.12 · Red-black Trees内核的侵入式红黑树、缓存最左节点和增广回调。

13 个概念