【问题标题】:How to form a recurrence for findng the height of a weight balanced binary tree?如何形成寻找权重平衡二叉树高度的递归?
【发布时间】:2026-01-05 20:30:01
【问题描述】:

权重平衡树是一棵二叉树,其中每个节点的编号为。左子树中节点的数量至少是一半,最多是数量的两倍。右子树中的节点数。那么如何形成一个递归来找到这个权重平衡二叉树的高度呢?

【问题讨论】:

    标签: algorithm tree


    【解决方案1】:

    只有完整的二叉树才能进行权重平衡。让H(n) 是具有正好n interior 节点的权重平衡二叉树的最大高度(因此,2*n+1 节点)。基本情况

    H(0) = 0
    

    很明显。复发

                 floor((4*n/3-1)/2)
    H(n) = 1 +           max          max(H(l), H(n-1-l))     for all n > 0
               l=ceiling((2*n/3-1)/2)
    

    根据高度的递归以及以下事实,给定n-1 不是根的内部节点,我们必须将它们分布在左侧 (l) 和右侧 (n-1-l) 子树之间,受制于重量平衡标准。 (有2*n 内部和外部节点要分配;最不平衡的分割可能是三分之一/三分之二;具有k 节点的完整二叉树具有(k-1)/2 内部节点。)

    让我们推测H(n) 是非递减的并写一个新的递归

    H'(0) = 0
    H'(n) = 1 + H'(floor(2*n/3-1/2))     for all n > 0.
    

    新递归的要点是,如果它实际上是非递减的,那么H(n) = H'(n),通过一个涉及简化另一个递归中的最大值的强归纳证明。事实上,不用求解H'(n),我们可以通过归纳证明它实际上是非递减的,所以这种简化是可以的。

    至于解决H'(n),我会挥手告诉你Akra--Bazzi 适用(或者,如果你想用floor 快速和松散地玩,可以使用Master Theorem Case 2),产生渐近绑定H'(n) = Theta(log n)

    【讨论】: