408 数据结构:红黑树定义、性质、插入、删除可视化

目标:不是背颜色规则,而是看懂“为什么要变色、为什么要旋转、为什么删除最麻烦”。

交互可视化

先点击“载入示例”,再试着插入或删除一个关键字。
红结点 黑结点 空叶子 NIL 默认视为黑色

操作步骤

408 角度:插入看“叔叔结点颜色”;删除看“替代结点 x 的双黑问题”。删除细节考试不一定深挖代码,但必须理解为什么需要兄弟结点配合调整。

王道/408 记忆版讲义

红黑树定义:红黑树是一种二叉排序树,每个结点带有红/黑颜色,并通过颜色约束保证树的高度不会退化成链表。

  1. 每个结点非红即黑。
  2. 根结点是黑色。
  3. 所有 NIL 空叶子结点视为黑色。
  4. 红结点的孩子必须都是黑色,即不能出现连续两个红结点。
  5. 从任一结点到其所有后代 NIL 叶子的简单路径上,黑结点数相同。这个数量叫黑高。

插入核心:新插入结点先染红,因为染红通常不破坏黑高;若父结点也是红色,才违反“不能红红相连”,然后根据叔叔结点颜色处理。

  • 叔叔红:父、叔变黑,祖父变红,问题上移到祖父。
  • 叔叔黑且内侧:先对父结点旋转,把它转成外侧情况。
  • 叔叔黑且外侧:父变黑,祖父变红,再对祖父反向旋转。

删除核心:真正麻烦的是“删除黑结点”。删除红结点不影响黑高;删除黑结点会导致某条路径少一个黑色,需要通过兄弟结点、侄子结点的颜色进行旋转和变色补偿。

考研优先级提醒:红黑树常作为平衡二叉排序树思想扩展。对 408 来说,AVL 的旋转、B/B+树、散列表通常更高频。红黑树要掌握定义性质、插入调整思想、删除为什么复杂,不要把大量时间砸进完整代码背诵。