news 2026/10/17 1:04:10

红黑树太难?手绘 几张图,带你从二叉树推导到红黑树(数据结构硬核篇)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
红黑树太难?手绘 几张图,带你从二叉树推导到红黑树(数据结构硬核篇)

标签:#数据结构 #算法 #红黑树 #Java集合 #面试必备 #可视化


💀 前言:二叉搜索树 (BST) 的“死穴”

我们都知道二叉搜索树(BST)的特性:左子树 < 根 < 右子树。
在理想情况下,它的查找效率是 。
但在极端情况下(例如插入 1, 2, 3, 4, 5),它会退化成一条链表,效率暴跌至 。

BST 退化示意图 (Mermaid):

退化 BST (链表)

1

2

3

4

5

理想 BST (平衡)

2

1

3

为了解决这个问题,我们需要自平衡。AVL 树追求极致平衡(高度差不超过 1),但维护成本太高。于是,红黑树横空出世。


🔑 一、 降维打击:红黑树的本质是 2-3 树

如果你直接看红黑树的 5 条规则,绝对会晕。
但如果你先看2-3 树,一切都豁然开朗。

1. 什么是 2-3 树?
  • 2-节点:存 1 个值,有 2 个孩子(和普通二叉树一样)。
  • 3-节点:存 2 个值,有 3 个孩子(比如[3, 5]在一个节点里)。

2-3 树的核心特性:绝对平衡。所有叶子节点都在同一层!
当插入数据导致节点“过胖”(变成 4-节点)时,它会中间向上分裂,保持高度平衡。

2. 红黑树怎么来的?

红黑树其实就是用二叉树的形式来模拟 2-3 树。

  • 2-节点 黑色节点。
  • 3-节点一黑一红(红节点通过红链接挂在黑节点旁边)。

映射关系图 (Mermaid):

红黑树的表示

Red_Link

B

A

右子树

左子树

中子树

2-3 树的 3-节点

左

中

右

A , B

Wait

Wait

Wait

秒懂结论:

  • 红链接:不仅仅是颜色,它代表**“结合”。红节点和它的黑父节点,其实在逻辑上是同一个大节点**(3-节点)。
  • 黑链接:代表普通的父子关系。

📜 二、 破解红黑树的 5 条天书规则

理解了“红黑树 = 2-3 树”后,我们再看规则,简直就是废话:

规则为什么?(2-3 树视角)
1. 节点是红或黑因为要区分是 2-节点还是 3-节点。
2. 根节点是黑色根节点如果红了,说明它是别人的子(3-节点的一部分),但它是根,没爸爸,所以必须黑。
3. 叶子(NIL)是黑色空节点默认为黑,为了方便计算黑高。
4. 不能有两个红节点相连核心!因为 3-节点(红+黑)是允许的,但 4-节点(红+红+黑)在标准红黑树中需要分裂,不允许保留。
5. 任意路径黑节点数相同核心!因为 2-3 树是绝对平衡的。红节点是“内部融合”的,不贡献高度。去掉红节点,大家高度当然一样!

🛠️ 三、 三板斧:左旋、右旋、变色

当插入新节点(默认为红色,因为我们总想把新值融合进现有的节点,凑成 3-节点)时,可能会破坏规则。我们需要三招来修复。

1. 左旋 (Left Rotate)

当右边出现红节点时(因为我们规定红节点只能挂在左边,或者为了平衡),需要左旋。

左旋后

Red

S

E

A

左旋前

Red

E

S

A

2. 右旋 (Right Rotate)

当左边出现连续两个红节点(双红违规)时,需要右旋。

3. 颜色翻转 (Color Flip)

当一个节点的左右孩子都是红色时。
这意味着它变成了一个临时 4-节点[红, 黑, 红]。
在 2-3 树中,4-节点需要分裂:中间的提上去(变红),两边的独立(变黑)。

颜色翻转示意图 (Mermaid):

翻转后 (分裂)

H

L

R

翻转前 (临时4节点)

Red

Red

H

L

R


⚔️ 四、 实战演练:插入推导

假设我们要插入序列:10, 20, 30。

  1. 插入 10:根节点,直接变黑。
  • 10(黑)
  1. 插入 20:新节点为红,比 10 大,放右边。
  • 10(黑) ---<红>--- 20(红)
  • 违规:右边有红链接!
  • 修正:左旋。变成20(黑) ---<红>--- 10(红)。
  1. 插入 30:新节点为红,比 20 大,放右边。
  • 20(黑) ---<红>--- 30(红)(左边还有个 10(红))
  • 现在状态:10(红) --- 20(黑) --- 30(红)。
  • 触发:左右双红 ->颜色翻转。
  • 10(黑),20(红),30(黑)。
  • 20是根,必须变黑。
  • 最终:20(黑)为根,左右是10(黑)和30(黑)。完美平衡!

🎯 总结

红黑树并没有那么可怕,它只是2-3 树的“二进制”影分身。

  • 所有的红色节点,都只是在依附于父亲,假装自己和父亲是一个大节点。
  • 所有的旋转和变色,都只是为了模拟 2-3 树的分裂和生长。

下次面试官再问你红黑树,不要背口诀,试着画出那个 2-3 树的对应关系,告诉他:“红黑树就是为了保证黑高平衡。”

Next Step:
打开 JDK 源码,找到TreeMap.java,搜索rotateLeft和fixAfterInsertion方法。对照着上面的图,你会发现那些曾经像天书一样的代码,现在竟然能读懂了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 11:31:40

Elasticsearch 存储水位线测试验证

目录标题Elasticsearch 存储水位线测试验证环境准备一、水位线说明默认水位线注意事项&#xff1a;本地存储场景二、查看水位线设置方式1&#xff1a;查看当前有效值&#xff08;推荐&#xff09;方式2&#xff1a;查看所有默认值方式3&#xff1a;查看磁盘使用情况三、修改水位…

作者头像 李华
网站建设 2026/10/14 12:18:25

无需科学上网:通过网盘直链下载助手获取大模型资源

无需科学上网&#xff1a;通过网盘直链下载助手获取大模型资源 在智能语音应用日益普及的今天&#xff0c;越来越多开发者希望将高质量的文本转语音&#xff08;TTS&#xff09;能力集成到自己的项目中。然而&#xff0c;一个现实问题摆在面前&#xff1a;许多开源大模型托管在…

作者头像 李华
网站建设 2026/10/16 16:52:08

救命神器!自考必看9款AI论文工具TOP9深度测评

救命神器&#xff01;自考必看9款AI论文工具TOP9深度测评 2026年自考论文写作工具测评&#xff1a;精准筛选&#xff0c;高效提分 随着自考人数逐年增长&#xff0c;论文写作成为众多考生面临的“拦路虎”。从选题构思到文献检索&#xff0c;再到内容撰写与格式规范&#xff0c…

作者头像 李华
网站建设 2026/10/12 15:38:30

日志监控与告警系统:保障GLM-TTS服务稳定性

日志监控与告警系统&#xff1a;保障GLM-TTS服务稳定性 在语音合成技术快速落地的今天&#xff0c;一个看似“安静运行”的 TTS 服务背后&#xff0c;可能正经历着 GPU 显存飙升、推理卡顿甚至任务静默失败。特别是像 GLM-TTS 这样支持零样本语音克隆和高采样率输出的复杂模型&…

作者头像 李华