红黑树
简介
红黑树是一棵特殊的二叉查找树,为了防止二叉树完全链话,一方面它增强了查找效率,又减少插入时间。相对于平衡二叉树的插入效率(插入时需要旋转至完全平衡 效率较低,比较适合插入较少的情况)较高。
特性
1.节点要么是红色要么是黑色
2.头节点必须是黑色
3.插入的节点必须是红色(如果每次插入的都是黑色就是失去了意义)
4.黑高相等(头结点开始到叶子节点的黑色节点个数相同,默认叶子节点都是null的黑色节点)
5.不可以有连续的两个红色节点(需要旋转保证 )
变换规则
1.变颜色的情况
- 当前节点的父亲是红色,且他的祖父节点的另一个子节点的颜色也是红色。(叔叔节点)
(1)把父亲节点设为黑色。
(2)把叔叔节点也设为黑色。
(3)把祖父也就是父亲的父亲设为红色。(爷爷)
(4)把指针定义到祖父节点设为当前要操作的节点。(爷爷)
2.左旋:当前父亲节点是红色,叔叔是黑色的时候。且当前节点是右子树,左旋以父亲节点作为左旋。
3.右旋:当前节点父亲是红色,叔叔是黑色的时候,且当前节点是左子树,右旋
(1)把父节点变为黑色
(2)把祖父节点(爷爷)变为红色。
(3)以祖父节点(爷爷旋转)