红黑树
红黑树的底层数据结构就是一棵二叉查找树(自平衡的二叉查找树)
二叉搜索树也叫二叉查找树,二叉排序树。
- 每个结点不是红色,就是黑色
- 不可能有连在一起的红色结点,两个黑色结点连在一起是可以的。
- 根结点是黑色。
- 每个红色结点的两个子结点都是黑色,叶子结点都是黑色,
红黑树的变换规则:
- 改变颜色,红变黑,黑边红
- 左旋
- 右旋
旋转和颜色变换规则:
所有的插入的点默认都是红色。
- 变颜色的情况(如图1中插入结点6后的,6,7结点):
当前结点的父亲是红色,且它的祖父结点的另一个子节点(叔叔结点)也是红色
变颜色的规则:
- 把父节点设为黑色
- 把叔叔结点也变为黑色
- 把祖父也就是父亲的父亲(爷爷)结点设为红色
- 把指针定义到祖父结点设为当前要操作的(爷爷)分析的点变换规则
- 左旋,(如图2中的12,5结点,做左旋)
当前父节点是红色,叔叔是黑色的时候,且当前的结点是右子树,左旋,
以父节点作为根结点左旋,如图2中的12,5结点,做左旋
- 右旋,(如图3的5,12结点)
当前父节点是红色,叔叔是黑色的时候,且当前的结点是左子树,右旋。
右旋规则:
- 把父节点变为黑色
- 把祖父结点变为红色(爷爷)
- 以祖父结点(爷爷)做选择。如图3中,是以19结点右旋。
待续。。。