如何"堆积"删除min后基于数组的最小堆?

时间:2014-10-31 09:57:12

标签: java arrays heap min-heap

一旦调用了remove min函数,我将如何在java中“堆积”基于数组的最小堆(这只是将索引为1的元素并将其删除,然后将其替换为数组中的最后一项)。我很困惑如何在删除min发生后再次将数组放入最小堆中。

索引0在堆最小数组中始终保持为空。父索引是i / 2,右边的孩子是2i + 1,左边的孩子是2i。

非常感谢任何帮助,谢谢你们!

1 个答案:

答案 0 :(得分:1)

取最后一个元素并将其复制到第一个位置。将heapsize减少一个并在第一个元素上调用heapify()。堆应该自行修复。这具有O(log n)

的复杂性
Min-Heapify-Down (Array A, int i):
    left ← 2i
    right ← 2i + 1
    smallest ← i

    if left ≤ heap_length[A] and A[left] < A[smallest] then:
        smallest ← left
    if right ≤ heap_length[A] and A[right] < A[smallest] then:
        smallest ← right

    if smallest ≠ i then:
        swap A[i] ↔ A[smallest]
        Min-Heapify-Down(A, smallest)