红黑树:R-B Tree
也是一颗自平衡的有序二叉树,但它的平衡不是根据子树的高度来调整的
而是给每个节点设置颜色,通过颜色的关系达到平衡
红黑树的特性:
1、每个节点或者是黑色或者是红色
2、根节点必须是黑色
3、每个叶子节点(NULL)是黑色
[注意:这里的叶子节点,是指空的叶子节点(NULL)]
4、如果一个节点是红色,则它的子节点必须是黑色
不能已有两个连续的红色
5、从从一个节点到该节点的所有子孙节点的所有路径上,包含了相同数目的黑色节点
红黑树只能保证大致上是平衡的(最长路径不会超过最短路径的两倍)
红黑树的插入:
插入的节点必须是红色
1、如果父节点是黑色,直接插入、不需要调整
2、如果父节点是红色,需要调整
a、叔叔节点不存在 or 叔叔节点为黑色
进行左旋 or 右旋
祖父节点置红、父节点置黑 黑色节点不增加
b、叔叔节点存在且为红色
祖父节点置红、父节点和叔叔置黑
把祖父节点看作当前节点,继续向上讨论
讨论a:
1、父节点为祖父节点的左子树,叔叔为右
(i)node节点为父节点的右节点,以父为轴右旋转
祖父置红、父置黑