平衡树——红黑树

平衡树:左右子树的树的高度相差不超过1。

红黑书使得时间复杂度大大降低,从O(N)到O(logN)。

红黑规则

1、每一个节点不是红色就是黑色

2、根点总是黑色

3、如果节点是红色,则它的子节点必须是黑色(反之不一定为真)

4、从根到叶节点或空子节点的每条路径,必须包含相同的黑色节点。


使成为红黑树的操作(满足红黑规则就一定是平衡树)

主要操作

一、颜色变换

规则:每当查找例程(插入都回要查找)遇到一个黑节点的两个节点都是红节点时,就要进行颜色变换,子节点变为黑色,父节点变为红色(根节点特殊,只能为黑色)

二、插入节点之后的旋转

分为三种情况:P是父节点,X是插入的节点,G是P的父节点


1、第一种情况不会引起任何不平衡,所以直接插入就可以

2、第二种情况操作如下

 

图示:

3、第三种情况


图示:


三、在下行途中的旋转

在查找的下行途中,可能会出现红节点的子节点也是红节点,该子节点违背了红黑规则,以该节点是内侧节点还是外侧节点分类


左图是(X)外侧节点情况,右图是内侧节点情况

1、X为外侧节点,操作如下


图示:


2、X为内侧节点,操作如下


图示:


总结:在插入过程中,必定先查找,可能是先遇到在下行途中的旋转,再是插入之后的旋转,而是否需要颜色变换可以多次验证,在旋转之后。



猜你喜欢

转载自blog.csdn.net/qq_33605294/article/details/80646098