是否找到AVL树的最小“内部”节点?

问题描述

我知道如何用公式n(h)= n(h-1)+ n(h-2)+1查找高度为h的AVL树(包括外部节点)中的最小节点数,但是我想知道是否有一个公式仅找到高度为h的AVL树的最小内部节点。

如果n(3)= 4,则仅计算内部节点。 n(4)= 7,如果我们仅计算内部节点。我可以将其绘制出来并计算内部节点,但是当您使用更大的AVL树时,会很混乱。

我似乎无法在此找到任何东西,而试图找到具有一致答案的模式只会导致数小时的沮丧。预先感谢。

解决方法

是的,有一种很好的方法来计算。让我们从两个最简单的AVL树开始,它们分别是0阶和1阶:

*    *
     |
     *

第一棵树没有内部节点,第二棵树有一个内部节点。这为我们提供了递归关系的基本案例:

  • I(0)= 0
  • I(1)= 1

从这里,我们注意到在n + 2阶的AVL树中获取最少内部节点的方法是,选择两个n和n + 1阶的树作为子节点(以最小化节点数),它们具有尽可能少的内部节点。生成的树将具有等于两个子树中的内部节点数的内部节点数,再加上一个用于新的根。这意味着

  • I(n + 2)= I(n)+ I(n + 1)+ 1。

应用这种重复操作会给我们顺序

0、1、2、4、7、12、20等

嘿-我们之前在某个地方看到过这个吗?我们有!每学期加一个就可以了

1、2、3、5、8、13、21等

这是斐波那契数列,向下移动了两个位置!所以我们的假设是

I(n)= F(n + 2)-1

通过对n进行归纳可以证明是这种情况。

这是获得此结果的另一种方法。想象一下,您拿了一个高度为n的AVL树,并去除了所有叶子。现在,您剩下的是高度为n-1的AVL树(证明了这一点!),该树中的所有其余节点都是原始树的内部节点。高度n的AVL树中最小的节点数是F(n + 2)-1,与我们的结果相符。