红黑树
概念:
红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或者BLACK,红黑树保证 最长路径 不超过 最短路径的两倍 ,(通过对任何一条从根节点到叶子结点上的简单路径来约束)因而近视平衡。
性质:
- 每个结点不是红色就是黑色
- 根节点是黑色的
- 如果一个根节点是红色的,则它的两个孩子结点是黑色的 (没有两个连续的红色结点)
- 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点 (每条路径上黑色结点的数量相等)
- 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)
约束:
红黑树的插入:
cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点
1.:cur为红,p为红,g为黑,u存在且为红
2.cur为红,p为红,g为黑,u不存在/u为黑
相反,当p为g的右孩子,cur为p的右孩子,则进行左单旋转 p、g变色– >>>p变黑,g变红
3.cur为红,p为红,g为黑,u不存在/u为黑 p为g的左孩子,cur为p的右孩子,则针对p做左单旋转;
相反,p为g的右孩子,cur为p的左孩子,则针对p做右单旋转则转换成了情况2