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中几种插入新节点时树的旋转和变色情况,希望对你有所帮助。
阅读全文
0 0
- RBTree的几种变色和旋转情况
- i++和++i的几种情况
- 红黑树(RBTree)的分析和实现
- android 点击变色的两种情况、textview点击变色以及自定义checkbox
- error LNK 2001的几种情况和解决方案
- 短信通信的几种情况和CMS错误
- spring autowired和resource生效的几种情况
- 短信通信的几种情况和CMS错误
- selenium定位不到元素的几种情况和解决方法
- SUBMIT的几种情况...
- define的几种情况
- SUBMIT的几种情况
- 推送的几种情况
- false 的几种情况
- js旋转的变色的文字
- GridView 鼠标移动变色 鼠标经过行变色的 几种方法
- 变色的旋转圆圈JS特效代码
- GridView 鼠标划过行变色的几种方法
- js-项目常用方法定义
- missing artifact *****.jar
- ADS学习2 阻抗匹配调试
- Tomcat 不同版本下的get post 中文乱码解决办法
- 更新vscode后突然不能格式化vue文件里的html部分的内容了
- RBTree的几种变色和旋转情况
- 当Split方法遇到特殊字符
- 学习笔记--实现LinkedList
- [LeetCode] 413. Arithmetic Slices
- eclipse 安装 升级 svn插件
- 杭电 1017 A Mathematical Curiosity
- linux上Nginx安装步骤
- 数据结构 快速排序(用C语言实现)
- 移动应用滑动屏幕方向判断解决方案JS判断手势方向