Data structures 给定堆中有多少叶子及其级别

Data structures 给定堆中有多少叶子及其级别,data-structures,binary-heap,Data Structures,Binary Heap,我有个问题是这样的: 有一个最大堆二叉树 假设堆中最底层有(2^2017)-2017个节点 A) 堆中有多少层 B) 堆里的叶子有多少 感谢您在最底层有2个节点的完整二进制堆具有(x+1)个级别。考虑这个堆: 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 9 它在底层有4(22)个节点,在底层有3个节点 如果底部级别已满,则叶节点数与底部级别上的节点数相同 在您的示例中,底层有(22017)-2

我有个问题是这样的:

有一个最大堆二叉树

假设堆中最底层有(2^2017)-2017个节点

A) 堆中有多少层

B) 堆里的叶子有多少


感谢您

在最底层有2个节点的完整二进制堆具有(x+1)个级别。考虑这个堆:

    1
 2     3
4 5   6 7
         1
     2       3
   4   5   6   7
  8 9
它在底层有4(22)个节点,在底层有3个节点

如果底部级别已满,则叶节点数与底部级别上的节点数相同

在您的示例中,底层有(22017)-2017个叶节点。我们知道这个级别上可能的最大节点数是22017(因为最大值总是2的幂)。从上面的例子中我们也知道,树中有2018个级别

然而,叶节点的数量不是(22017)-2017。考虑这个堆:

    1
 2     3
4 5   6 7
         1
     2       3
   4   5   6   7
  8 9
它在底层有两个叶节点,在底层之上有三个叶节点(5、6和7)


我想你会发现,在你的例子中,叶节点的数量是(22017)-2017+2017/2。2017/2是上述级别上的叶节点数。

“(2^2017)-最底层的2017个节点”。这不是说那些是叶子吗?你试过这个问题吗?如果是的话,展示你的方法和你认为问题出在哪里。这就是我的想法,但答案似乎太简单了。也许这是个骗人的问题。。。我不知道怎么回答一个问题。我猜正确的答案应该是“至少2016个级别”。有人有什么想法吗?一个包含三个级别的完整堆在最底层(叶级)有2^(3-1)个节点。具有四个级别的堆在叶级别有2^(4-1)个节点。您建议的(2^2017)-2017叶堆意味着叶级别未完全满。(如果堆已满,则将有2^2017个节点。)无论如何,该堆将有2018个级别。@JimMischel感谢您的回答。您是否同意2017-2017年的假期数为2^2017?首先,非常感谢您的详细回复!我想问几个问题:1)我相信你的意思是,底部有2^x个节点的完整二进制堆有x个级别,对吗?2) 最后你说叶节点的数量是2^2017-2017+(2017/2)。但这是一个奇数,当每一级,如果它是完整的,必须有一个偶数。你能解释一下你是怎么打到这个号码的吗?你是如何计算出这是叶节点数量的?我的意思是说2017/2是一个有理数。底部一行缺少2017个节点。上面级别上有1008个节点没有子节点,一个节点有一个子节点。使用整数时,2017/2为1008。所以叶节点的数量是(2^2017)-2017+1008。明白了。再次感谢你,吉姆,你帮了很多忙。