红黑树插入删除算法思想

一、红黑树介绍

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

  (1)  节点为黑色或红色

  (2)根节点为黑色

  (3)   红色节点不能连续

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

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

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

二、左旋和右旋

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

(1)左旋

(2)右旋

三、插入算法思想

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

 PBG
(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为远侄子节点

 QBPBNBF
(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不变

代码实现:https://blog.csdn.net/Jodanluo/article/details/104242292

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值