我很难找到一个递归公式来查找高度为h的最大高度AVL树的数量。高度0有1,高度1有2,高度2有4,高度3有8,等等,对吗?
答案 0 :(得分:0)
高度为n
的AVL树中的节点h
的最大数量为n = 2^0 + 2^1 + ... + 2^(h-1) = 2^h - 1
(除根节点之外的每个节点都有两个子节点,这意味着每个级别的节点数比前一个节点多两倍)一)。这样就得出了高度h
的高度公式,以节点n
的形式为:h = log(n + 1)
。
答案 1 :(得分:0)
让我们从另一个角度来看这个问题。
代替给定节点数的最大高度,让我们找到给定高度的最小节点数。对于此问题,我们具有此递归函数:n(h) = n(h-1) + n(h-2) + 1
,因为您在右子树中至少需要n(h-1)
个节点,在左子树中至少需要n(h-2)
个节点,而根需要一个节点。
(图片和更完整的说明here)。
考虑到这一点,您必须找到一个h
,使得n(h) < n < n(h+1)
,其中n是给定的节点数。
简短的回答是h < 2log(n) + 2