红黑树
红黑树是一棵二叉搜索树,拥有二叉搜索树的性质:左子树的所有值小于根节点,右子树的所有值大于根节点。同时还具有近似平衡性质,近似平衡指的是任何节点的左右子树高度不会超过一半。它相对平衡二叉树的优势在于,任何不平衡都可以在三次之内的旋转解决,而平衡二叉树最坏会达到树的高度级别的旋转次数。
红黑树的性质
红黑树节点除了左节点,右节点,关键字的值三个基本二叉树元素之外,还维护了红黑色作为标记。同时null被定义成为叶子节点,具有关键字的节点被定义成为内部节点。
红黑树通过以下的性质维护红黑特性:
- 每个节点是红色的,或者黑色的
- 根节点是黑色的
- 叶子节点null是黑色的
- 如果一个节点是红色的,则它的两个子节点都是黑色的,也就是不能有连续两个红节点
- 从任意内部节点出发,到达它的每个叶子节点,每条路径经过的黑色节点的数量是相同的
从某个节点 x x x出发(不包含该节点)到达一个叶节点的任意一条简单路径上的黑色节点个数称为该节点的黑高,记为 h x ( x ) hx(x) hx(x),定义null的黑高为0
一个有n个内部节点的红黑树的高度至多是 2 l g ( n + 1 ) 2lg(n+1) 2lg(n+1)
**证明:**先证明以任一节点x为根的子树中至少包含 2 h b ( x ) − 1 2^{hb(x)}-1 2hb(x)−1个内部节点。节点x的黑高是 h b ( x ) hb(x) hb(x),这个树拥有最少节点的情况是不具有红节点,那么它的黑高就等同于它的树高。该树的最后一层全是null,因此节点为x的树至少拥有 2 h b ( x ) − 1 2^{hb(x)}-1 2hb(x)−1个内部节点。根据性质4,不能有连续两个红节点,因此高度为 h h h的红黑树,黑高至少为 h / 2 h/2 h/2,根据上述证明可得:
n ≥ 2 h b ( x ) − 1 ≥ 2 h / 2 − 1 n\ge 2^{hb(x)}-1 \ge 2^{h/2}-1 n≥2hb(x)−1≥2h/2−1
由上式可得
n ≥ 2 h / 2 − 1 n + 1 ≥ 2 h / 2 l o g ( n