Java 利用2-3树理解红黑树

前一篇文章就描述的2-3树的结构特性和添加元素的操作:

https://blog.****.net/qq_41723615/article/details/89408056

下面利用2-3树来理解红黑树:

 

一、颜色翻转和右旋转:

 

树添加新元素:(颜色翻转)flipColors

1.首先向空的红黑树添加一个元素42,让它变为黑色。

2.添加一个新的节点37,直接添加在左子节点位置上即可:

Java 利用2-3树理解红黑树

3.如果要添加的位置在右子节点上呢?例如红黑树有一个黑色根节点37,需要在右子节点上添加一个节点42:

Java 利用2-3树理解红黑树

此时就需要进行左旋转了:

Java 利用2-3树理解红黑树

这种操作在2-3树中相当于把一个新的节点放在二节点中。

4.向红黑树中的“3-node”添加元素:

向红黑树添加节点66:

Java 利用2-3树理解红黑树

此时应该添加到右孩子中:

Java 利用2-3树理解红黑树

这种情况在2-3树种相当于37 42 66都是融合在一起的。可以理解为2-3树的临时的4节点:

Java 利用2-3树理解红黑树

这种情况对应在红黑树就相当于三个2节点都是黑色的节点,并且节点不需要旋转,将42所处的节点位置分裂而成的两个子节点37 66变为黑色即可:每个黑节点的左侧如果没有红色节点则表示该黑色节点为单独的2节点。

Java 利用2-3树理解红黑树

此时的根节点在2-3树中又要和它的父亲节点进行融合变为新的根节点,相当于把42节点变为红色:

Java 利用2-3树理解红黑树

此时可以发现42与它的子节点颜色进行翻转。

Java 利用2-3树理解红黑树

 

5.添加12的操作:

Java 利用2-3树理解红黑树

结果:

Java 利用2-3树理解红黑树

这种情况在2-3树类似于:

Java 利用2-3树理解红黑树

此时就需要进行右旋转了:

1.为根节点与左孩子添加右孩子,方便理解:

Java 利用2-3树理解红黑树

2.进行node.left = T1

Java 利用2-3树理解红黑树

3.接着让x.right = node

Java 利用2-3树理解红黑树

4.此时需要维护颜色信息:x.color = node.color

Java 利用2-3树理解红黑树

5.此时的12 37 42对应到2-3树还是临时4节点,所以需要进行node.color = RED

Java 利用2-3树理解红黑树

此时就完成了红黑树的右旋转过程:

Java 利用2-3树理解红黑树

 

 

 

 

 

温馨提示

关注我的公众号【Java剑主】,学习更多有深度的技术文章。本博客不在记录原创博文,请移步公众号获取最新内容。

修道注重根基,熟透原理方能看透事物本质,编程亦如此! Java修炼之道,道心坚不移!踏剑寻梦,不忘初心!

Java 利用2-3树理解红黑树