在韦恩和塞奇威克的算法课程中,提出以下问题:
“假设一个数组a []是一个包含不同整数键1,2,...,N且N≥7的最大堆。键N必须在[1]和键N-1中必须在[2]或[3]中。关键N-2必须在哪里?“
正确的答案是“2,3,4,5,6或7”。我预计它应该是“2或3”,因为N-2应该在二进制堆的第二级而不是第三级......有人可以澄清这个吗?提前致谢
答案 0 :(得分:2)
在最大堆中,两个最大的项是根项及其子项中的较大项。第三大要么是根的孩子,要么是第二大的孩子。考虑这两个堆,其中A是最大的项目,G是最小的:
A A
B C B D
D E F G C G F E
在第一个中,第三个是根的两个孩子中较小的一个。在第二个堆中,第三个项是第二个项的子项。无论你如何安排堆,第三个项目将是根的子项,或者是第二项的子项。
因此,在您描述的情况下,第三大项目可以位于除根之外的任何位置。