(xa2)红黑树:结构

官方信息技术老师·10 页·深入(追求细节与边界)·0 次浏览·3 天前
平衡二叉树着色规则树形约束

(xa2)红黑树:结构

从 5 条约束看懂红黑树如何保持近似平衡

按 空格/→ 演示下一步

1 / 10 页

全部页面点击任意一页,跳回舞台从这页播放

平衡二叉树着色规则树形约束

(xa2)红黑树:结构

从 5 条约束看懂红黑树如何保持近似平衡

1第 1 页 · (xa2)红黑树:结构

定义规则

上一页我们看到红黑树长得像一棵彩色的二叉搜索树。但任意给节点涂红涂黑都行吗?什么样的树才算'红黑树'?这页揭晓定义它的五条铁律——单独看各有道理,合起来才保证了树高有界。

节点二色性
每个节点要么红色、要么黑色,颜色是节点的基本属性
根必为黑
根节点必须是黑色的,不能是红色
红不邻红
红色节点的两个子节点必须都是黑色,不能两个红节点相邻
叶必为黑
所有叶子节点(NIL 空节点)都是黑色的哨兵
黑高一致
从任一节点到其所有后代叶子,路径上的黑色节点数相同
城市供水的主干管与支管对应 →红黑树的5条规则

黑=主干水管;红=支管;任一节点走任意路径到末端,主干管段数相同——保证各处水压均衡

h2log2(n+1)h \le 2\log_2(n+1)
2第 2 页 · 定义规则

实例验证

上页画出的那棵树,光「看着像红黑树」还不够。下面把它送进安检通道——每条性质过一遍,过不去就判定不合格。

根为黑
树根节点必须是黑色,否则一开始就不合格
红不相邻
红色节点的两个孩子必须都是黑色
黑高相等
任一节点到所有后代 NIL 叶子的黑节点数相同
NIL 也算黑
末端空节点 NIL 计为黑色,黑高统计不能漏
过机场安检对应 →核查红黑树性质

一关对应一条性质,全部通过才放行

3第 3 页 · 实例验证

提升变换

前面我们看过了红黑树的五条规则和验证方法。往树里插入新节点时,新节点默认染红——一旦它的父节点也是红色,「红色不能相邻」的规则就被破坏了。修复这种违规的第一招,叫「提升变换」。

触发条件
新插入的红色节点,父为红、且叔也为红——双红冲突
核心动作
父与叔同时染黑,祖父染红;只改色、不动结构
提升本质
红色冲突从「父-子」上移到「祖父-父」,违规位置向根方向滚动一层
循环与终止
祖父不断向上推:到根则直接染黑结束;遇到黑父即停
典型应用
插入修复的 Case 1,对应「叔红」情形(区别于「叔黑」需旋转)
客服投诉层层升级对应 →提升变换

一线与主管都权限不足,两人同时培训转正(变黑),但问题被推到经理(变红)继续处理

4第 4 页 · 提升变换

末端节点

上页我们说「所有叶节点都是黑色」,但红黑树里的「叶」和你直觉中的不一样——它不存数据,专门用来标记空指针的边界。我们来认识这个特殊的末端节点。

NIL 末端节点
每个原本为空指针的位置都放一个 NIL 哨兵节点,它不存任何数据
永远为黑
所有 NIL 节点一律涂黑,这是定义写死的,不允许变红
统一边界
加入 NIL 后每个真实节点恰好有两个孩子,整棵树成为满二叉树
黑高的锚点
从任一节点到末端节点的路径上黑色节点数都相等,NIL 就是计数终点
海平面对应 →末端节点

所有建筑都从同一片海面起算高度,海面是固定不动、可比较的锚点

5第 5 页 · 末端节点

红黒树,即是B-树

上一页我们把红色节点看成挂在父亲上的小尾巴。换个角度:红黑树和 B-树(2-3-4 树)是同一个数据结构,只是写法不同。

红色边 = 节点内键
红边把相邻节点捆成 B-树节点内部并列的键
黑色边 = 节点间边界
黑边分隔两个 B-树节点,是真正的树形结构
合并读法
1 黑 + 2 红子 = 4-节点;1 黑 + 1 红 = 3-节点;纯黑 = 2-节点
平衡性继承
B-树高度 O(log n),红黑树因此天然平衡
合并单元格的表格对应 →B-树节点 ↔ 红黑树

B-树节点像合并多行的单元格;红黑树把它拆开,红边表示'原属同一合并行'

6第 6 页 · 红黒树,即是B-树

平衡性

前面定义了红黑树的五条规则,但你可能好奇:为什么这些规则加起来恰好让树保持平衡?答案藏在一个关键性质——黑高一致。它就像一只无形的手,限制了树的高度膨胀。

黑高一致
任一节点到所有后代叶子的路径上,黑色节点数相同
路径长度约束
最长路径不超过最短路径的 2 倍
弱平衡
比 AVL 宽松:旋转少,插入删除更便宜
复杂度保障
查找、插入、删除均稳定在 O(log n)
大楼电梯从 1 楼到任意楼层对应 →红黑树根到叶子的路径

必经的「主楼层」(黑节点)数量固定,途经夹层(红节点)浮动不超过一层

bh路径长度2bhbh \leq \text{路径长度} \leq 2 \cdot bh
7第 7 页 · 平衡性

: 接口定义

: 接口定义:定义、要点与典型应用

: 接口定义
: 接口定义:定义、要点与典型应用
8第 8 页 · : 接口定义

本节要点

  • 5条着色规则是不变量,所有操作都在维护它
  • 红黑树 ≡ 2-3-4 B树,是理解操作的最强视角
  • 近似平衡(高≤2log₂n)换来更少旋转
  • NIL哨兵统一「末端」概念,消除空指针特例
  • 插入修复看叔叔,删除修复看兄弟
延伸主题:插入的完整修复流程删除的复杂情况梳理与AVL树的工程取舍
9第 9 页 · 本节要点

课后思考

先合上笔记独立想,再对照答案看思路——好问题没有唯一解。

1红黑树五条性质看似互相独立,能否用一句话概括它们共同服务的设计目标?

参考答案五条性质共同服务于「近似平衡」——保证根到任意叶子的最长路径不超过最短路径的两倍,让查找、插入、删除稳定在 O(log n)。任一条都不可单独废除。

2若把 n 个递增键依次插入空红黑树,最终树呈现什么形状?高度大约多少?

参考答案几乎是一棵完全右斜的树,黑色节点沿脊线分布,红色节点夹在中间。高度约为 2·⌊log₂(n+1)⌋,这正是 RBT 相对 AVL 牺牲的最坏树形。

3用「红黑树 ≡ 2-3-4 树」的视角看,删除操作中的「双黑节点」对应 2-3-4 树的什么状态?

参考答案双黑等价于 2-3-4 树中「键数不足」的节点——本质是向兄弟「借键」或与父节点「合并」。在 B 树视角下,删除修复就是节点的 underflow 处理。

10第 10 页 · 课后思考