红黑树的旋转、变色

导航链接

    红黑树的性质
    红黑树的旋转、变色
    红黑树的插入
    红黑树的删除

什么是旋转?

旋转是以一个父结点作为参照物的。旋转分为左旋转右旋转,其对应的结果就是将左子结点(后称左结点)或右子结点(后称右结点)替换原来的父结点,具体操作如下。

右旋转

  1. 使左结点成为新的父结点。
  2. 原来的父结点,成为新的右结点。
  3. 先前左结点的右子树,变成新右结点的左子树。

在这里插入图片描述

左旋转则是一个相反的过程:

  1. 使右结点成为新的父结点。
  2. 原来的父结点,成为新的左结点。
  3. 先前右结点的左子树,变成新左结点的右子树。

在这里插入图片描述


旋转改变了什么?

通过上图不难看出,无论是左旋还是右旋,始终都没有改变二叉搜索树的大小排序:α < X < β < Y < γ变化的,仅仅是将一颗子树上的一个结点,移动到了另一棵子树上。


什么时候旋转?

当左子树树高超过右子树树高两倍的时候,进行右旋。简记:左太高,右旋。

进行右旋的场景:
在这里插入图片描述
当插入10时,100子树过高,于是将50结点进行右旋转,从而降低左子树的高度。

当右子树树高超过左子树树高两倍的时候,进行左旋。简记:右太高,左旋。

进行左旋的场景:
在这里插入图片描述
当插入180时,100的右子树过高,于是将150结点进行左旋转,从而降低右子树的高度。


什么时候变色?

当满足以下条件时:

  1. 当前结点是红色。
  2. 父结点与叔结点都是红色。

进行变色:

  1. 爷结点变成红色(如果是根结点,最终会变回成黑色)。
  2. 父结点、叔结点变成黑色。

如图,插入结点50后,导致100400都变了色。

在这里插入图片描述
通过变色,可以将一条路径上两个连续的红结点转成换合法结点,随之带来的影响,是需要同时改变两棵子树的高度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值