ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

红黑树技术细节

2022-05-29 23:00:43  阅读:211  来源: 互联网

标签:结点 黑色 技术细节 红色 红黑树 newNode 节点


参考:

https://zhuanlan.zhihu.com/p/273829162(图解什么是红黑树)

https://zhuanlan.zhihu.com/p/481921783(红黑树原理以及实现)

关键概念

红黑树的本质其实也是对概念模型:2-3-4树的一种实现,因此我们先来关注2-3-4树。

2-3-4树是阶数为4的B树,B树,全名BalanceTree,平衡树。这种结构主要用来做查找。

平衡的定义是说从空链接到根节点距离相等(也就是说非叶子节点是不会存在空链接的,子节点要么全存在)。

 

23树和234树像红黑树的转换

红黑树其实就是对概念模型2-3树(或者2-3-4树)的一种实现。有两种转换模型:

1,23树转换的红黑树是左倾红黑树,左右结点一红一黑(更加简单)

2,234树转换的红黑,左右结点可以同时为红色(即4结点只有3个key中间为黑,左右为红的平衡结点)

 

红黑树的5的定义

1,节点是红色或黑色。
2,根节点是黑色。
3,每个叶子节点都是黑色的空节点(叶子结点指为空的叶子结点)。
4,每个红色节点的两个子节点都是黑色的(从每个叶子到根的所有路径上不能有两个连续的红色节点)。
5,从任意节点到其每个叶子的所有路径都包含相同数目的黑色节点。红色结点不贡献高度

 

红黑树的核心(以23树为转换模型)

染色:本质是向上分裂

红色结点要和父节点结合对应到23树的3结点

旋转:本会是为了平衡

左旋和右旋

 

红黑树的操作

插入

新插入的节点(newNode)为红色。
按照二分查找树插入规则插入。
分情况讨论(以下情况基本都是为了保持上文所讲的的红黑树特性4和特5)
1、若newNode为根节点,则变为黑色,插入完毕,返回 true。
2、若newNode父节点为黑色,则插入完毕,返回 true。

3、如下图所示,若newNode父节点为红色,且叔叔节点存在且为红色,则父节点与叔叔节点变为黑色,祖父节点变为红色,newNode = 祖父节点。


4、如下图所示,若newNode父节点为红色,叔叔节点不存在或为黑色,且newNode为父节点右孩子,父节点为祖父节点左孩子,则以父节点为轴左旋,进入情况6.

5、如下图所示,若newNode父节点为红色,叔叔节点不存在或为黑色,且newNode为父节点左孩子,父节点为祖父节点右孩子,则以父节点为轴右旋,进入情况7

6、如下图,此时以祖父节点为轴进行右旋,将祖父节点变为红色,newNode变为黑色。

7、如下图,此时以祖父节点为轴进行左旋,将祖父节点变为红色,newNode变为黑色。

 

删除

删除操作比较复杂,思路还是根据23树的删除作对比,以满足第4和5条的定义要求。(不要求掌握细节)

 

标签:结点,黑色,技术细节,红色,红黑树,newNode,节点
来源: https://www.cnblogs.com/tkzc2013/p/16325208.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有