红黑树删除后平衡修正需严格按六种情形顺序处理:①w红→左旋+换色;②w黑且子全黑→w染红、x上移;③w黑且左红右黑→w右旋+换色;④w黑且右红→左旋+换色+右子染黑;⑤⑥为镜像情形。

实现红黑树节点删除后的平滑平衡修正,必须严格处理六种不同结构情形下的颜色翻转、旋转与父-兄-侄关系重置,任一情形漏判或顺序错乱都将导致树失去红黑性质。
删除后重新平衡的触发前提
从红黑树中删除一个黑色节点(或黑色叶子哨兵)后,被删节点所在路径黑高减1,破坏了红黑树“任意路径黑节点数相等”的性质;此时需以该路径缺失黑高的“双黑”节点为起点,沿父链向上修复——【该“双黑”节点实际并不存在,仅是逻辑标记,对应代码中传入的x指针】。
修复过程围绕当前节点x与其兄弟节点w展开,依据w的颜色、w子节点颜色组合、w在父节点中的左右位置,划分为六种互斥情形。
六种情形的判定与转换逻辑
设当前待修复节点为x,其父节点为p,兄弟节点为w。所有情形均以x为左子节点为基准推导;若x为右子节点,只需将所有“左/右”操作镜像互换即可复用同一套逻辑。
立即学习“C++免费学习笔记(深入)”;
情形划分严格按以下优先级顺序判断,不可调换:
① 若w为红色 → 必先进入情形1,强制转化为w为黑色的情形;
② 若w为黑色,且w的两个子节点均为黑色 → 进入情形2;
③ 若w为黑色,w的左子为红色、右子为黑色 → 进入情形3;
④ 若w为黑色,w的右子为红色 → 进入情形4;
⑤ 若x为右子节点,w为红色 → 情形5(镜像情形1);
⑥ 若x为右子节点,w为黑色且w的右子为红色 → 情形6(镜像情形4)。
情形1:兄弟节点w为红色
方法一:执行左旋(p→w),交换p与w颜色,使w变黑、p变红。
这一步不解决双黑问题,但将w转为黑色,从而让后续情形2~4可被触发;【若跳过此步直接检查w子节点颜色,会因w仍为红色而误判进入错误分支】。
旋转后x的兄弟变为w的左子,继续按情形2~4规则判断。
情形2:兄弟w为黑色,且w的两个子节点均为黑色
将w染红,x上移至父节点p,继续向上修复。
此时x路径黑高仍比兄弟路径少1,但问题上移;若p原为红色,则染红w后p可作为新x直接恢复平衡;若p为黑色,则新x成为“双黑”,需继续迭代。
情形3:兄弟w为黑色,w的左子为红色、右子为黑色
方法一:对w执行右旋 → w的左子成为新w,原w变为新w的右子。
方法二:交换新w与原w的颜色。
这步操作将w的左红子“推”到w的右子位置,构造出情形4所需的“w黑且右子红”结构;不这样做会导致无法通过单次左旋恢复黑高。
情形4:兄弟w为黑色,w的右子为红色
执行左旋(p→w),交换p与w颜色,并将w的右子染黑。
此步是唯一真正消除“双黑”的情形:左旋后,原x路径新增一个黑色节点(w),同时w的右子由红变黑,确保旋转后子树满足红黑性质;【w右子染黑不可省略,否则右子树黑高会多1】。


















