其他分享
首页 > 其他分享> > 红黑树技术细节

红黑树技术细节

作者:互联网

参考:

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