红黑树的实现原理和应用场景?
https://mp.weixin.qq.com/s/kEaqW0FgzkU0X6UUQBm0-w
红黑树的特性
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
红黑数并不是一个完美平衡二叉树,从图1可以看到,根节点P的左子树高,但左子树和右子树的黑结点的层数相等,也即
任意一个结点到每个叶子结点的路径都包含数据相同的黑结点,所有我们叫红黑树这种平衡为黑色完美平衡
前面讲到红黑树能自平衡,它靠的是什么?三种操作:左旋、右旋和变色。
左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。
右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变
变色:结点的颜色由红变黑或由黑变红。
但要保持红黑树的性质,结点不能乱挪,还得靠变色了。怎么变?具体情景又不同变法?