【问题标题】:Finding the minimum "internal" nodes of AVL tree?找到 AVL 树的最小“内部”节点?
【发布时间】:2021-02-18 20:46:25
【问题描述】:

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

所以对于 n(3) = 4,如果我们只计算内部节点。 n(4) = 7,如果我们只计算内部节点。我可以把它画出来并计算内部节点,但是当你得到更大的 AVL 树时,它就会变得一团糟。

我似乎在这方面找不到任何东西,试图找到具有一致答案的模式只会导致数小时的挫败感。提前致谢。

【问题讨论】:

  • 您想找到完整二叉树的内部节点数吗?树是否是 AVL 是否重要?我认为没有

标签: data-structures binary-tree avl-tree


【解决方案1】:

是的,有一个很好的计算方法。让我们从两个最简单的 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,与我们的结果相符。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2013-10-21
    • 2020-03-31
    相关资源
    最近更新 更多