写在前面:
红黑树有如下性质:有n个内部节点的红黑树,其高度h≤2log(n+1)。
该性质非常优秀,由该性质我们可以知道,对于n个节点的红黑树来说,对其查找的时间复杂度可以控制在O(log n)量级。
在算法导论上,包括部分数据结构教材上,对于该性质的数学证明略显抽象,这里给出朕关于该性质的一些通俗形象的例子,帮助诸位爱卿更好地理解该性质以及数学证明过程。
红黑树高度上限2log(n+1)的通俗理解:
有n个内部节点的红黑树,其高度h≤2log(n+1)
该性质说,对于一个有n个内部节点的红黑树来说,其最大高度h_max≤2log(n+1)。
那么,对于一个有n个内部节点的红黑树,在什么情况下,其高度会最高呢?不好理解?
没关系,我们先简化一下问题,如果是问:对于一个有n个内部节点的树(一般的树,非红黑树),其最大高度是多少,很显然,最大高度是n,也就是长长的一条树,如下图:
从上述简单的例子,我们可以得到一些启发,对于一颗红黑树,当它的内部节点数已知为n的情况下,要让树的最大高度h_max尽可能的大,必须把尽可能多的节点安排在一根枝桠上,就像上图所示的情况。
那么我们能不能和上面例子一样,把所有n个节点全部放在一个枝桠上呢?很显然,不行。因为红黑树具有一条重要的性质:红黑树有一个确定的黑高,也就是从任一节点到叶节点的简单路径上,所含的黑节点数量相同。如果把所有n个节点全部放在一个枝桠上,不妨设除根节点外全部是左孩子,那么根节点的黑高从左走为n,而从右走为1,显然违背了该性质(注意!红黑树是二叉排序树)
由此可知,要找到最大高度h_max,就是要有一根“长长的枝桠”的同时,还需要维持红黑树的性质。
设树的高度为h,要找到n个节点的红黑树的最大高度h_max,等价于红黑树高为h时找到最少节点数n_min(这两种说法表述同一种状态)。此时树的黑高bh≥h/2(红黑树性质),这里不加证明的给出下图,在该图情况下,红黑树具有最少节点数。
在上图中,红黑树的黑高取最小值h/2,此时为了维持红黑树性质,又为了使得红黑树的节点数尽可能的少,因此出了“长长的枝桠外”,其他部分为全部黑节点的“满二叉树”。
当h充分大时,“长长的枝桠”相对于其余部分来说可以忽略,此时红黑树的最小节点数为上图红框部分,即,反解有
。
则对于n个节点的红黑树来说,其高度上限为。
写在后面:
各位爱卿若有疑问,欢迎上奏与朕探讨。