红黑树通过变色、左旋、右旋及组合操作维持五条性质:1.变色调整颜色以保黑高;2.左旋处理右倾失衡;3.右旋处理左倾失衡;4.插入双红按叔节点与位置分四情形修复;5.删除后依兄弟状态做四类补偿调整。

一、理解红黑树节点变色的基本规则
红黑树在插入或删除节点后,需通过变色操作维持其五条性质,其中关键在于保持从任一节点到其每个叶子的路径上包含相同数目的黑节点。变色不改变结构,仅修改节点颜色属性以满足局部平衡条件。
1、将红色父节点与其红色子节点同时改为黑色,其祖父节点由黑变红。
2、若当前节点为根,则强制置为黑色。
3、当叔节点为红色时,执行“叔父同红则祖父变红、叔父变黑”操作。
二、左旋操作实现与触发条件
左旋用于处理右倾过重的情形,即当新插入节点位于右子树且破坏黑高平衡时,通过旋转提升右子节点,降低原根节点,从而重构局部子树结构。
1、设当前节点为 x,其右子节点为 y,令 x 的右指针指向 y 的左子树。
2、令 y 的左子节点父指针指向 x。
3、将 y 的左指针设为 x,y 的父指针设为 x 的原父节点。
4、若 x 是根节点,则更新根指针为 y;否则将 x 原父节点对应子指针指向 y。
三、右旋操作实现与触发条件
右旋用于处理左倾过重的情形,即当新插入节点位于左子树且引发连续红链接时,通过旋转提升左子节点,降低原根节点,恢复左右子树高度相对均衡。
1、设当前节点为 y,其左子节点为 x,令 y 的左指针指向 x 的右子树。
2、令 x 的右子节点父指针指向 y。
3、将 x 的右指针设为 y,x 的父指针设为 y 的原父节点。
4、若 y 是根节点,则更新根指针为 x;否则将 y 原父节点对应子指针指向 x。
四、插入后双红冲突的四种情形处理
插入新红节点可能引发父节点也为红色的冲突,需依据叔节点颜色与新节点位置组合判断具体情形,每种情形对应唯一修复序列:变色或旋转或二者组合。
1、叔节点为红色:执行变色操作,不旋转,递归检查祖父节点。
2、叔节点为黑色且新节点为父节点右子:先对父节点左旋,转为情形3。
3、叔节点为黑色且新节点为父节点左子:对祖父节点右旋,并交换父与祖父颜色。
4、叔节点为黑色且新节点为父节点右子、父节点又为其父左子:先左旋父节点,再右旋祖父节点,最后交换原祖父与新根颜色。
五、删除后黑高失衡的补偿性调整
删除黑节点可能导致某路径黑节点数减少,需通过兄弟节点颜色、子节点结构及旋转变色组合进行补偿,确保所有路径黑高一致。
1、若兄弟为红色:将兄弟变黑、父节点变红,对父节点朝兄弟方向旋转,重新进入判断流程。
2、若兄弟为黑色且两子皆黑:将兄弟变红,递归处理父节点。
3、若兄弟为黑色、远侄为红、近侄为黑:先对兄弟朝近侄方向旋转,再视作情形4处理。
4、若兄弟为黑色、远侄为红:将兄弟染成父节点颜色,父节点染黑,远侄染黑,并对父节点朝兄弟方向旋转。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











