UTF8gbsn
红黑树介绍
红黑树是一颗二叉树,并满足以下属性.
-
每一个节点要么红色要么黑色.
-
根节点是黑色.
-
所有叶子节点NIL是黑色.
-
红色节点的左右孩子必定是黑色节点.
-
从任何一个节点出发,并达到这个节点下面的所有叶子节点的所有路径.这些路径中,含有的黑色节点个数相同.
高度
今天我们要说的是如果一颗含有n个内部节点的红黑树.它的最大高度是多少?
2 l g ( n + 1 ) 2lg(n+1) 2lg(n+1)
其中 l g lg lg是以2为底的对数.
证明
-
首先根据性质我们可以知道一颗红黑树中,任何你个节点x的左子树和右子树各自含有多少个黑色的节点.根据性质5,他们含有的黑色节点数应该相等.而且和父节点含有的节点数之间的关系是相等或-1的关系.
-
假设我们用bh(x)来表示二叉树当前节点到叶节点所含有的黑色节点个数(不含当前节点).那么可以知道节点x的左子树和右子树的任何一条到叶子节点的路径都含有的黑色节点数为 b h ( x ) bh(x) bh(x)或 b h ( x ) − 1 bh(x)-1 bh(x)−1
-
由此可见一个红黑树的节点数至少含有 2 b h ( t ) − 1 2^{bh(t)}-1 2bh(t)−1个.其中t是这颗红黑树的根节点.
-
又因为 b h ( t ) bh(t) bh(t)和二叉树整体高度 h ( t ) h(t) h(t)含有一定的关系.这个关系式 h ( t ) / 2 ⩽ b h ( t ) h(t)/2\leqslant bh(t) h(t)/2⩽bh(t)(由红黑树的性质4可得).这样算来可以获得不等式
n ⩾ 2 b h ( t ) − 1 ⩾ 2 h ( t ) 2 − 1 n\geqslant 2^{bh(t)-1}\geqslant 2^{\frac{h(t)}{2}}-1 n⩾2bh(t)−1⩾22h(t)−1 由此推出
h ( t ) ⩽ 2 l g ( n + 1 ) h(t)\leqslant 2lg(n+1) h(t)⩽2lg(n+1)
于是原式得证.