红黑树插入删除算法思想

萝らか妹 提交于 2020-02-06 06:06:55

一、红黑树介绍

红黑树是特殊的二叉查找树,具有以下五个特点:

  (1)  节点为黑色或红色

  (2)根节点为黑色

  (3)   红色节点不能连续

(4)根节点到NIL节点的各个路径上黑色节点数量相同

(5)NIL节点为黑色,NIL节点为叶节点的空的孩子

根据性质(4)可知,红色节点具有0或2个孩子。

二、左旋和右旋

在红黑树删除和插入之后,为了保持红黑树的状态,可能需要用到左旋和右旋两种操作,左旋和右旋操作不改变红黑树是二叉查找树的特点。

(1)左旋

(2)右旋

三、插入算法思想

红黑树在插入新节点时可能会改变红黑树的性质,在新节点插入时,需要根据以下几种情况做相应的操作,新节点插入默认为红色(对红黑树平衡影响最小),插入的节点都会成为叶节点。假设插入节点(当前节点)为Q,父节点为P,叔父节点为B,祖父节点为G,插入新节点时会遇到一下几种情况,可根据不同的情况做不同的操作。

  P B G
(1) 红/黑 黑/红
(2)
(3)

(1)直接插入新节点

(2)插入Q后,将P和B变成黑色,G变为红色,再将G视为Q,进行下一轮的判断,进入平衡调节阶段。

(3)a、若Q为P的左子,P为G的左子,则调换P和G 的颜色,并对P进行右旋,完成调节

         b、若Q为P的右子,P为G的左子,先对P进行左旋,转化为情况a。

         c、若Q为P的右子,P为G的右子,则调换P和G的颜色,并对P进行左旋,完成调节。

         d、若Q为P的左子,P为G的右子,先对P进行右旋,转换为情况c。

此外若Q为根节点,直接将Q置为黑色即可,情况(3)是平衡调节阶段会遇到的情况。

四、删除算法思想

删除操作给红黑树带来的影响比较大,因为删除节点可能是叶节点或是非叶节点,当要删除一个节点时,可能会遇到以下几种情况:

(1)删除的节点无孩子,若节点为红色,则直接删除(不影响红黑树性质),若节点为黑色,先再进行平衡调节再删除。

(2)删除的节点只有一个孩子,由红黑树的性质可得,该节点为黑色,且孩子为红色,则将该节点和孩子节点进行数值调换,转换为情况(1)

(3)删除的节点有两个孩子,则将该节点和右子树中最小的节点进行数值调换,转换为情况(2)或情况(1)

总结三种情况,在进行删除操作时,首先要做的就是将节点位置调换到叶节点位置,然后再进行平衡调节。平衡调节的步骤如下:Q为当前节点,B为兄弟节点,P为父节点,BN为近侄子节点,BF为远侄子节点

  Q B P BN BF
(1)
(2)
(3)
(4) 红/黑 黑/红
(5) 红/黑

(1)将B和P进行颜色调换,然后将P向Q的方向进行左旋或者右旋,转换为情况(2),Q不变

(2)将B置为红色,P置为黑色,完成平衡调节

(3)将B置为红色,P视为Q,进行下一轮判断,最终可能转换为(2)或者一直N取到根节点,取到根节点时结束

(4)将P和BF置为黑色,B置为P的颜色,然后将P向Q的方向进行左旋或者右旋,完成平衡调节

(5)将WN与B进行颜色调换,并将B向BF方向进行左旋或者右旋,转换为情况(4),Q不变

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!