二进制堆索引

时间:2018-06-07 09:47:43

标签: algorithm heap

在韦恩和塞奇威克的算法课程中,提出以下问题:

“假设一个数组a []是一个包含不同整数键1,2,...,N且N≥7的最大堆。键N必须在[1]和键N-1中必须在[2]或[3]中。关键N-2必须在哪里?“

正确的答案是“2,3,4,5,6或7”。我预计它应该是“2或3”,因为N-2应该在二进制堆的第二级而不是第三级......有人可以澄清这个吗?提前致谢

1 个答案:

答案 0 :(得分:2)

在最大堆中,两个最大的项是根项及其子项中的较大项。第三大要么是根的孩子,要么是第二大的孩子。考虑这两个堆,其中A是最大的项目,G是最小的:

      A                   A
   B     C             B     D
  D E   F G           C G   F E

在第一个中,第三个是根的两个孩子中较小的一个。在第二个堆中,第三个项是第二个项的子项。无论你如何安排堆,第三个项目将是根的子项,或者是第二项的子项。

因此,在您描述的情况下,第三大项目可以位于除根之外的任何位置。