RBTree的几种变色和旋转情况

来源:互联网 发布:蜂王浆 品牌 知乎 编辑:程序博客网 时间:2024/05/24 06:12
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中几种插入新节点时树的旋转和变色情况,希望对你有所帮助。
原创粉丝点击