【问题标题】:Maximum number of nodes that can be in a tree of height K?高度为 K 的树中的最大节点数?
【发布时间】:2017-04-08 19:48:53
【问题描述】:

所以,我正在查看高度为 8 的树中的最大节点数。

我相信正确的公式是 2^(k+1) - 1。因此 2^8+1 - 1 = 511。 我很困惑,因为我在网上看到了很多不同的答案和材料。

任何人都可以确认我是否正确/不正确并有所启发 提前致谢

【问题讨论】:

  • 为了验证你的答案,只需在一张纸上从K = 1开始画出高度递增的树;这样,您就可以快速验证您的公式。
  • 你的意思是2^(k+1) - 1
  • ^ 是的,我改了
  • 答案取决于一个节点可以处理多少个分支。 Trees 不必是 binary,即具有 2 个分支的节点。他们可以拥有更多。
  • @Andreas 我认为在这种情况下,一个节点可以处理两个分支。你能进一步解释一下你的意思吗?

标签: java tree nodes


【解决方案1】:

我想你说的是二叉树,所以答案很简单。 2^k-1,所以在你的情况下 2^8-1 = 255。

以高度为 k 的树为例,如果添加新级别,则可以通过在每个叶子中添加两个节点来复制节点数量。如果你取高度为 1 的树,它有 1 个节点,2^1-1;高度 2, 2^2-1=3…

【讨论】:

  • 因此我对 K=8 的回答应该是 2^8 - 1 = 255?
  • 谢谢,这个公式也可以用来找到树的最小高度,例如85 个节点。由于最小高度意味着每个节点都有两个分支。简单地重新排列 2^(k) - 1 = 85 然后使用自然对数来隔离 K 是否可行?
  • @MD9 是的,从技术上讲,你可以使用log2(n + 1),向上取整,即对于n = 85,你得到ceil(log2(86)) = 7。但是,通过调用Integer.numberOfLeadingZeros(int i) 来使用位逻辑会更快。正如 javadoc 显示的那样:ceil(log2(x)) = 32 - numberOfLeadingZeros(x - 1),所以对你来说就是32 - numberOfLeadingZeros(n + 1 - 1) = 32 - numberOfLeadingZeros(n)
  • @MD9 是的,您可以使用公式:log2(85+1) = 6,4 ≈ 7。这是因为您使用的是公式,高度为 6 您可以取 2^6 -1 = 63, 7, 2^7 -1 = 127。所以公式是 2^k -1 = 节点,你可以做 log2(nodes+1) = K
【解决方案2】:

是的,你是对的。高度为 h 的树中的最大节点数(从叶节点的高度为 0 开始) = (2^(h+1)) -1 = (2^(8+1)) - 1 = (2^9) -1 =511

二叉树中节点的高度是从叶子节点到目标节点的路径中的最大边数。

那么对于高度为 1 的树,最大节点数为 3(1 个根节点和 2 个子节点=1+2)。 (2^(h+1)) -1 = (2^2)-1=3

的结果相同

那么对于高度为 2 的树,最大节点数为 7(一个根节点和 2 个子节点,然后每个节点的 2 个子节点 =1+2+4)。 (2^(h+1)) -1 = (2^3)-1=7 的结果相同

那么对于高度为 3 的树,最大节点数为 15(一个根节点和 2 个子节点,每个节点有 2 个子节点,每个节点有 2 个子节点 = 1+2+4+8)。 (2^(h+1)) -1 = (2^4)-1=15

的结果相同

这是我在 stackoverflow 上的第一个答案,为欢呼点赞?。

您也可以查看此 geeksforgeeks 链接以获得更多了解

https://www.geeksforgeeks.org/relationship-number-nodes-height-binary-tree/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多