20
/ \
18 19
/ \ / \
10 13 15 1
/\ /\
5 9 8 11
上面是Max-Heap,它是一系列插入后的结果,并删除了最大操作。 让我们假设最后一个操作是插入的。 什么可能是最后一次插入操作的关键?
我不确定的原因是因为问题没有说明它是否已经堆积,所以它可能已经或者不能被排序。但话说回来我可能错了。
附加问题:是"删除最大操作"与"删除"相同因为我之前没有遇到这个词,这有助于澄清我的困惑。
谢谢!
答案 0 :(得分:0)
插入二进制堆的方法是将项放在堆的末尾,然后将其通过堆筛选到适当的位置。
因此,如果您显示的堆是最后一次插入操作后的堆,那么在该插入开始时,堆必须只有10个项。新项目放在值11的位置。
如果物品从那里被筛选出来,那么它可能被筛选的唯一位置就是现在数字13,18和20的位置。但插入的数字不能是20,因为如果它已经存在,则18将成为堆的根,并且这将不是有效的(因为19大于18,因此19将是根)。
因此,最后可能插入的唯一值是18,13和11。
在插入之前,树的那个分支可能是:
[18,13]
:添加11不需要任何交换。[18,11]
:添加13,然后将其与11交换。[13,11]
:添加18,然后用11交换树,然后用13