数据结构(二)--- 红黑树 (2)

 

数据结构(二)--- 红黑树

 

4.2、P 为红色且 U 不存在或为黑色 

4.2.1、P 是左节点,C 左节点 (P 为红色且 U 不存在或为黑色)(如图4.2.1)

(1)将 P 设为黑色

(2)将 PP 设为红色

(3)对 PP 进行右旋

数据结构(二)--- 红黑树

 

4.2.2、P 是左节点,C 右节点 (P 为红色且 U 不存在或为黑色)(如图4.2.2)

(1)对 P 进行左旋

(2)设 PP 为当前节点

(3)此时结构变为 4.2.1 结构,继续进行 4.2.1 操作

数据结构(二)--- 红黑树

 

4.2.3、P 是右节点,C 右节点 (P 为红色且 U 不存在或为黑色)(如图4.2.3)

(1)将 P 设为黑色

(2)将 PP 设为红色

(3)对 PP 进行左旋

数据结构(二)--- 红黑树

 

4.2.4、P 是右节点,C 左节点 (P 为红色且 U 不存在或为黑色)(如图4.2.4)

(1)对 P 进行右旋

(2)设 PP 为当前节点

(3)此时结构变为 4.2.3 结构,继续进行 4.2.3 操作

 

数据结构(二)--- 红黑树

 

节点插入总结:

当前节点(新插入的节点)会在旋转变色之前就设置为红色;为什么插入节点为红色?因为根据红黑树的特性,当父节点为黑色时,不需要做自平衡操作,如果为黑色,那么插入后褐色层次增加了,破坏特性5。

在4.1情况中(P为红色且U为红色)如果重复递归判断到根节点,把根节点设置成了红色,则根据特性1,必须把根节点变回黑色,此时红黑树的黑色节点层次就增加了一层(自底向上生长)。

 

 四、节点的删除

红黑树的节点插入比较复杂,删除操作更加复杂,但掌握了规律理解起来就简单多了;

说到节点删除之前,需要先了解一下前继节点和后继节点的概念,笔者学习过程中看到一个非常容易理解的描述,如下图:

数据结构(二)--- 红黑树

把所有的节点投射到X轴上,这时所有的节点都是自左至右排好的,这样某个节点的左边的节点就是它的前继节点,右边的节点就是它的后继节点。

由上图可以看到,后继节点是右子树的最左节点,前继节点是左子树的最右节点。

如150节点的前继节点就是130,后继节点就是160。

 

节点删除后空出的位置需要找到其后继节点或前继节点进行补位,如果被删除的节点没有子节点还好,要是有子节点,不补位的话树就散了;并且补位之后有可能会破坏红黑树的平衡结构,这时就需要进行自平衡了。

所以节点的删除过程可以理解为寻找后继节点或前继节点(一般习惯用后继几点)进行补位后进行自平衡的过程;这样理解,节点删除问题就可以转换为补位节点(后继节点)的问题,补位完成后节点的颜色变为被删除的颜色

而这一结果再简单就可以理解为:补位节点后继节点)的删除的自平衡问题,后继节点总是在树的最底层。

这样一来就可以区分补位节点的几种情况:

 

数据结构(二)--- 红黑树

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfdyf.html