堆,涓滴方法

时间:2013-05-24 04:59:56

标签: heap max-heap

我目前正在做一个最大堆。当我使用remove()方法时,我明白我会与更大的孩子交换。如果两个孩子都有同样的优先权怎么办?例如

案例1:

heap = [5,7,7,16,15]

如果我删除5并将其替换为15,我会向右下方(这是错误的),所以我会向下流到左侧。

但使用相同的逻辑,如果我有

heap = [5,7,7,16,15,18]

我向左涓流,它将不再是一个有效的堆。

我该怎么做才能确保我有一个有效的堆?

1 个答案:

答案 0 :(得分:1)

没关系。

在第一种情况下向右倾斜很好:

[15,7,7,16] - > [7,7,15,16]

在第一种情况下向左倾斜很好:

[15,7,7,16] - > [7,15,7,16]

在第二种情况下向右倾斜很好:

[18,7,7,16,15] - > [7,7,18,16,15]

在第二种情况下向左倾斜很好:

[18,7,7,16,15] - > [7,18,7,16,15] - > [7,15,7,16,18]