RB-Tree插入过程详解
红黑树具有很优秀的特性,其自平衡性特性,局部调整特性使得红黑树插入,删除,以查找,以及这些过程的内存资源的占用,的综合性能是非常高的(通常我们会拿红黑树和AVL树进行对比)。
对于红黑树的这些特性,在此不再赘述。我们在此讨论红黑树的插入,删除的过程。
先讨论插入过程:
1 插入节点为根结点,则红色变黑色
2 插入节点的父亲节点为黑节点,则插入节点为红色节点,不需要变色
3 若爷爷节点为根节点,父亲节点和叔叔节点为红色,则,插入节点仍为红色,父亲节点和叔父节点变为黑色,爷爷节点仍然为黑色(根结点必须为黑色)
4 若爷爷节点不是根节点,父亲节点和叔叔节点为红色,则,插入节点仍为红色,父亲节点和叔父节点变为黑色,爷爷节点变为红色。
5 插入节点的 父亲节点为红色,父亲的兄弟,即叔叔节点为黑色时(没有叔叔节点时,叶子节点存在,且也为黑色),此时要经过旋转变换。
上述插入的是节点40
上述是插入节点70
可见,针对情况五,是存在不同情况的。需要区分插入的节点是父亲节点的左节点,还是右节点。
如果是左节点,围绕插入节点的父亲节点向右旋转,父亲节点变成黑色,新插入的节点和爷爷节点变成黑色节点
如果是右子节点,需要经过两次旋转,使得插入节点旋转为父亲节点,并变为黑色,插入节点的父亲节点和爷爷节点变为红色儿子节点
RB-Tree插入过程详解的更多相关文章
- Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(9)-innodb下的记录锁,间隙锁,next-key锁
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(1)-基本知识
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(2)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(3)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(4)-select for update/lock in share mode 对事务并发性影响
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(6)-数据库隔离级别(1)
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
随机推荐
- chrome谷歌开发者工具(hover时候的css样式怎么在浏览器调试)
很多小伙伴在开发的时候,大多是在用谷歌开发者工具调试代码(快捷键F12 或 Ctrl-Shift-i). 可能会经常遇到需要调试hover样式的时候,一般都是直接改代码,然后在页面上刷新查看效果. 其 ...
- .NET Core TDD 前传: 编写易于测试的代码 -- 单一职责
第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 第4篇 ...
- 总结http get和post的区别
这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎. 什么是http? get.post常见的区别 ge ...
- springboot~集成测试里的redis
测试不应该访问外部资源 对于单元测试,集成测试里,如果被测试的方法中使用到了redis,你需要去模拟一个单机环境的redis server,因为只有这样,你的测试才是客观的,即不会因为网络和其它因素影 ...
- Redis学习笔记~分布锁的使用
回到目录 分布锁主要用在多进程共同访问同一个资源时候,用来保持同一时间段只能有一个进程执行,同时避免了并发冲突的出现,这在很多场景都会用到,像秒杀库存,抽奖库存,多操作者处理一家公司等. void T ...
- [开发技巧]·Numpy中对axis的理解与应用
[开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——3.底盘通信协议
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- java中求质数(素数)的问题
这篇笔记讲讲关于java中质数的问题. 一.什么是质数(素数)? 定义:质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数.它可以有无限个数. 二.ja ...
- Linux用户组权限简单解析
Linux的用户是以组为单位,每个用户都属于某一个组,而用户组的权限,是指某个用户对某个文件(文件夹)的操作权限,这里涉及用户组的概念. 其中root用户拥有全Linux系统中最高的权限,比任何其他用 ...
- 002. https通信(CA证书认证 + 密钥商定 )
服务端与客户端建立https通信的过程: 一.认证:客户端第一次访问服务端时,要求服务端证明自己可被信任 1.证书:由服务端申请.第三方CA颁发的,存放在服务端的证书: 证书包含:服务端的公钥.服务端 ...