红黑树的旋转

如果对红黑树还不了解的,建议看上一篇博客。

https://blog.csdn.net/weixin_37909391/article/details/112252930

首先回顾以下红黑树的性质:

  1. 节点必须是红色或者黑色。
  2. 根节点必须是黑色。
  3. 叶节点(NIL)必须是黑色(NIL节点无数据,是空节点)。
  4. 红色节点不能连续。
  5. 从任一节点出发到其每个叶子节点的路径,黑色节点的数量必须相等。

左旋转

确定目标节点,图中就是E和S,这2个节点相对原来位置的左右边来说,都是向左边移动。

其实左旋就是

1.S节点要向左边移动,就先把左边节点断开

2.S节点去到E点位置(相对原来位置更左了),各条线不断开

3.E点被S点占据了,E点移动下来(相对原来位置更左了),各条线不断开

4.断开的子树跟节点连接到E上

同理,右旋动态图如下:

 以上就是左右旋转的介绍,下面总结红黑树新增导致红黑树需要重新平衡的需要旋转和变色的情况

1、N为根节点,N变黑色

2、N.P(新增节点父节点)为黑色,无需改动

3、 N.P为红色,N.U红色(PU变黑,G变红,如果还不满足红黑色,把G当重新安装1,2,3,4处理)

4、N.P为红,C.U为黑色或者为空节点,分情况讨论

1)NPG三点一线,以PG为目标进行旋转,P移动到G,看是左旋还是右旋;PG变色

2)NPG不在一线,以NP为目标旋转,看左旋还是右旋;按照4.1处理。

例子可以拿 https://blog.csdn.net/weixin_37909391/article/details/112252930 中的5种情况和其他例子按照上面规则旋转

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值