自下而上建筑堆

时间:2011-11-10 23:44:07

标签: heap

我正在研究一个问题,我有10个键,我必须自下而上构建。根据我的书,我应该构建(n + 1)/ 2堆,其中底部为11/2 = 5.5堆。然后是11/4为第2级,11/8为第3级,依此类推。

问题是我得到了这个结果:

(例如使用'a')

picture of heaps

因为11/2 = 5.5,所以我舍入到6,11 / 4 = 2.75所以3,11 / 8 = 1.375所以2,而11/16 = 0.6875所以1。

即使我不围捕,我仍然有一堆怪异的东西。谁能解释我搞砸了哪里?

1 个答案:

答案 0 :(得分:1)

你搞砸了,因为只允许二进制堆中的最后一层不满。具有10个元素的堆应该如下所示:

        1
     /     \
    2       3
   /  \    / \
  4    5  6   7
 /\   /
8  9  10

至于自下而上的构造,你不需要过多考虑堆的数量。基本的想法是

  1. 没有孩子的节点是微不足道的。
  2. 如果一个节点有两个堆作为子节点,我们可以通过冒泡操作将其转换为更大的堆。
  3. 所以在开始时我们知道第4层(8,9和10)中的节点已经是堆。然后我们可以使用它来冒泡第三层中的节点,将它们变成堆,依此类推。