对RBTree的总结

来源:互联网 发布:ssm log4j sql 编辑:程序博客网 时间:2024/06/05 10:54

红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。
红黑树是满足下面红黑性质的二叉搜索树
1. 每个节点,不是红色就是黑色的
2. 根节点是黑色的
3. 如果一个节点是红色的,则它的两个子节点是黑色的(两个红色结点不能相邻)
4. 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
为什么满足上面的颜色约束性质,红黑树能保证最长路径不超过最短路径的两倍?
假设在极端情况下,最短路径上的结点全为黑,最长路径上的黑色结点数与最短路径上的相同,红色结点只能夹在黑色结点的中间,最长路径的长度必然不会超过最短路径的两倍。

插入的几种情况
cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点
第一种情况
cur为红,p为红,g为黑,u存在且为红
则将p,u改为黑,g改为红,然后把g当成cur,继续向上调整。
这里写图片描述
第二种情况
cur为红,p为红,g为黑,u不存在/u为黑
p为g的左孩子,cur为p的左孩子,则进行右单旋转;相反,p为g的右孩子,cur为p的右孩子,则进行左单旋转
p、g变色–p变黑,g变红
这里写图片描述
第三种情况
cur为红,p为红,g为黑,u不存在/u为黑
p为g的左孩子,cur为p的右孩子,则针对p做左单旋转;相反,p为g的右孩子,cur为p的左孩子,则针对p做右单旋转–>转换成了情况2
这里写图片描述

0 0