红黑树插入后通过五类操作修复双红冲突:一变色、二左旋+变色、三右旋+变色、四根节点强制染黑、五自底向上回溯检查,确保满足红黑树五性质。

一、变色修复双红冲突
当新插入节点与其父节点均为红色,且其祖父节点为黑色时,若叔节点也为红色,则可通过整体变色操作消除局部双红冲突,无需旋转。该方法利用红黑树性质中“红色节点子节点必为黑色”的约束,通过提升黑色层级来重平衡颜色分布。
1、将父节点颜色设为黑色。
2、将叔节点颜色设为黑色。
3、将祖父节点颜色设为红色。
4、以祖父节点为当前节点,递归向上检查是否引发新的双红冲突。
二、左旋后变色修复双红冲突
当新插入节点为右子节点、父节点为左子节点、叔节点为黑色时,需先对父节点执行左旋,使结构转为“直线型”,再通过变色恢复红黑性质。左旋可调整父子层级关系,为后续统一变色提供拓扑基础。
1、以父节点为旋转中心,执行左旋操作:将右子节点提升为新父节点,原父节点变为新父节点的左子节点。
2、交换原父节点与新父节点的颜色。
3、将新父节点的左子节点(即原父节点)颜色设为黑色。
4、将新父节点的右子节点颜色设为黑色。
三、右旋后变色修复双红冲突
当新插入节点为左子节点、父节点为右子节点、叔节点为黑色时,需先对父节点执行右旋,使路径变为左倾直线结构,再通过颜色重置满足红黑树定义。右旋确保后续变色操作作用于连续三层同向节点,避免颜色错位。
1、以父节点为旋转中心,执行右旋操作:将左子节点提升为新父节点,原父节点变为新父节点的右子节点。
2、交换原父节点与新父节点的颜色。
3、将新父节点的右子节点(即原父节点)颜色设为黑色。
4、将新父节点的左子节点颜色设为黑色。
四、祖父节点为根时的强制变色处理
当双红冲突传播至根节点,即当前处理节点为根且颜色为红色时,必须将其强制设为黑色,以满足红黑树“根节点必为黑色”的硬性规则。此操作不破坏黑高平衡,因整棵树黑高同步增加1。
1、判断当前节点是否为根节点。
2、判断当前节点颜色是否为红色。
3、若同时满足上述两个条件,则将当前节点颜色设为黑色。
五、插入后自底向上回溯修复
双红冲突修复必须从新插入节点开始,沿父指针逐层向上回溯,每次处理均基于当前节点、其父节点、祖父节点及叔节点的相对位置与颜色组合。回溯过程在遇到黑色祖父或到达根节点时终止。
1、将当前节点初始化为新插入节点指针。
2、当当前节点非根且其父节点颜色为红色时,进入修复循环。
3、根据父节点是祖父节点的左子还是右子,确定叔节点位置。
4、依据叔节点颜色及当前节点相对父节点的位置,选择对应修复分支(变色、左旋+变色、右旋+变色)。
5、修复完成后,将当前节点更新为其祖父节点,继续向上检查。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











