我正在研究一个问题,我有10个键,我必须自下而上构建。根据我的书,我应该构建(n + 1)/ 2堆,其中底部为11/2 = 5.5堆。然后是11/4为第2级,11/8为第3级,依此类推。
问题是我得到了这个结果:
(例如使用'a')
因为11/2 = 5.5,所以我舍入到6,11 / 4 = 2.75所以3,11 / 8 = 1.375所以2,而11/16 = 0.6875所以1。
即使我不围捕,我仍然有一堆怪异的东西。谁能解释我搞砸了哪里?
答案 0 :(得分:1)
你搞砸了,因为只允许二进制堆中的最后一层不满。具有10个元素的堆应该如下所示:
1
/ \
2 3
/ \ / \
4 5 6 7
/\ /
8 9 10
至于自下而上的构造,你不需要过多考虑堆的数量。基本的想法是
所以在开始时我们知道第4层(8,9和10)中的节点已经是堆。然后我们可以使用它来冒泡第三层中的节点,将它们变成堆,依此类推。