RBTree的几种变色和旋转情况

RBTree的旋转情况
大体可以分为两类
1. 不需要旋转的
cur,parent,uncle为红 grandfather为黑 只需要将parent,uncle变为黑,grandfather变为红,这个树便调整完毕

2. 需要左右旋转的
(1)cur,parent为红,grandfather为黑,uncle不存在或者为黑 且parent为grandfather左,cur为parent左,起始树图:


从上面可以看到,cur和p不能相连为同时为红,如果有这种情况则只能说明cur不是新增节点,a,b下方有新增节点,分析之后画出新增节点位置与树图:

从cur到下面树的部分属于第一种情况,变色就好,调整之后变成了


这也便是起始树的样子,然后开始调整上面的树,因为左下角的树已经调整完成,需要调整的是右树,这里如果在右,则调整左树的位置,即上图 以g为旋点进行右旋 ,旋转后图形如下:



这里我们可以看到旋转后,每个路径上的黑节点的数量不相同,那么我们最后需要进行变色,即p变黑,g(p的右节点)变红,那么这个树就调整完成如果p的上面还有树,则继续向上调整,最后树图如下:



(3)这是第二种情况的升级情况,cur变成p的右节点(内节点)起始树图为:

对比第二种情况的起始树图,发现我们只要把cur挪到p的左节点即完全相同
那么我们 这里 首先需要进行左旋转 ,结果如下图:


这便和第二种情况相同,依照第二种的旋转变色就可以完成,不再赘述。

这便是RBTree中几种插入新节点时树的旋转和变色情况,希望对你有所帮助。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值