数据结构(二)--- 红黑树 (4)

数据结构(二)--- 红黑树

 

2.2.2、R 为黑色且为右子节点,B 为黑色

2.2.2.1、R 为黑色且为右子节点,B 为黑色,BL 为红色,BR 为任意(如图 2.2.2.1)

(1)、将 B 设为 P 的颜色
(2)、将 P 设为黑色
(3)、将 BL 设为黑色
(4)、对 P 进行右旋

数据结构(二)--- 红黑树

注意:

此种情况请参考 2.1.2.1中的问题与回答。

 

2.2.2.2、R 为黑色且为右子节点,B 为黑色,BL 为黑色,BR 为红色(如图 2.2.2.2)

(1)、将 B 设为红色
(2)、将 BR 设为黑色
(3)、对 B 进行左旋,得到 2.2.2.1 情况
(4)、按照 2.2.2.1 情况进行处理

 

数据结构(二)--- 红黑树

 

2.2.2.3、R 为黑色且为右子节点,B 为黑色,BL 为黑色(NULL),BR 为黑色(NULL)(如图 2.2.2.3)

(1)、将 B 设为红色
(2)、将 P 作为新的补位节点
(3)、重新进行删除节点处理

 

数据结构(二)--- 红黑树

需要注意:

参考 2.1.2.3 下方的需要注意说明

节点删除总结:

节点的删除情况比较多,但左右子节点情况是对称的,理解了其中一种,另一种也很快会理解。

补位节点可以用前继节点代替,也可以用后继节点代替,一般习惯用后继节点。

节点删除过程是先找到补位节点,然后进行自平衡处理,然后才会移除补位节点,即带补位节点的自平衡。

在全黑节点的情况下,可能发类似递归的生自底向上的寻找补位节点的过程,到根节点为止。

自平衡的顺序可以理解为,先自己处理,处理不了找兄弟节点参与,还处理不了找父节点参与,还处理不了让父节点找父节点的兄弟处理,以此类推。

 

五、红黑树总结 

通过上边对红黑树的详细谅解,我们就可以回答开始提出的问题了。

1、红黑树为什么要维持自平衡、自平衡的好处是什么?

答:红黑树是一个高效的查询树,保持平衡结构,可以保证从根节点到叶子节点的最长路径不超过最短路径的两倍,可以保证查询效率。

2、什么是左旋,右旋,变色?

答:左旋、右旋、变色都是对节点所在子树的操作,以节点为基进行变化保持树的平衡的操作。

3、什么条件下需要进行左旋、右旋、变色?

答:当发生节点插入或删除操作时,红黑树的平衡被破坏,这是就要根据具体的情况进行自平衡操作,即左旋、右旋或变色。

 

红黑树的结构比较复杂,无论是节点的插入还是删除,都有可能破坏自平衡结构,而自平衡过程最复杂情况可能是自底向上处理,直到根节点。

红黑树是平衡二叉树,但不是完美的平衡二叉树,只是黑色完美的平衡二叉树(性质5)

红黑树的五条性质任意一套被破坏都触发自平衡操作。

红色节点的子节点一定是黑色,但黑色节点的子节点则可以是红色和黑色任意一种,即可以有相邻的两层节点都是黑色的情况,如图:

 

数据结构(二)--- 红黑树

 

 此博客为笔者参考网络上各类文章总结性书写,原创手打,如有错误欢迎指正。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfdyf.html