0

我目前正在做一个最大堆。当我使用 remove() 方法时,我知道我会与较大的孩子交换。如果两个孩子的优先级相同怎么办?例如

情况1:

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

如果我删除 5 并用 15 替换它,我会滴到右边(这是错误的),所以我会滴到左边。

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

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

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

我可以做些什么来确保我有一个有效的堆?

4

1 回答 1

0

不要紧。

在第一种情况下向右滴流是可以的:

[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]

于 2013-05-24T05:45:14.637 回答