三句秘诀搞定红黑树的旋转变换

红黑树的性质

1、每个节点不是红色就是黑色

2、不可能有连在一起的红色节点(这个性质后面要用,其他性质看一遍就够了)

3、根节点都是黑色的(什么是根节点:父节点为null,或者入度为0)

4、每个红色节点的两个子节点都是黑色。叶子节点都是黑色(每个节点最后都是有NL节点,只是没有画出来)

 

画出来就是这个下面的样子

 

先来熟悉一下左旋操作:

只看E和S,就是将S移动上去,E点移动下来,再将S的左节点变成E点的右节点

左旋看懂了,再来看看右旋操作:

 

先看总结的文字:

后面会一行一行的演示,不用怕

首先明确:旋转和颜色变化:所有插入的点默认为红色,比如下面要插入的数字 6 

 

开始演示 :

比如现在我们有这么一个红黑树,就是大的数字在右边,小的在左边,插入这些数字后,形成这么一张二叉树

我们想要插入 6 ,第一步,插入的所有点为红色,找到位置,不难判断出位置在7 的左边

此时满足情况:当前节点的父亲是红色,且它的叔叔节点也是红色

步骤:① 把父节点设为黑色   ②把叔叔也设为黑色  ③ 把祖父设为红色(爷爷)

④ 把指针定义到祖父(爷爷)节点设为当前要操作分析的点的变换规则

 

 

左旋:(把眼睛盯着上面的红色 5 和 12根据左旋图进行想象,结果就是下面的图)当前父节点是红色,叔叔节点是黑色的时候,且当前的节点是右子树(左旋的三个条件,这里的12节点都满足条件)。左旋以父节点作为左旋

这里 的 S 是12,E是 5,旋转之后,要将12的左节点交给5的右节点

左旋之后的结果:

 

到这里,还是不满足红黑树的性质,,两个红色的节点依然相连

右旋当前节点(5)的父节点(12)是红色,叔叔节点是黑色(13),且当前节点为左子树,进行右旋

注意:这里和左旋不一样,这里使用的指针,上面已经画出来了,使用的是爷爷节点。   ps:  左旋只要使用两个红色节点之间的线旋转,右旋使用爷爷这个点来旋转

注意右旋比左旋还多了一步,需要变颜色,父节点(12)变成黑色,爷爷(19)节点变成红色,结果见下面二图,12的右子树变成19的左子树

 

自己编一个口诀:

父红  叔红  父叔爷变色

父红 叔黑 右子树    左旋

父红 叔黑 左子树    右旋,父爷变色

 

现在再来看看这段文字是不是清楚多了

 

 

 

红黑树的源码:

请大家在评论区展示

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值