Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我目前正在做一个最大堆。当我使用 remove() 方法时,我知道我会与较大的孩子交换。如果两个孩子的优先级相同怎么办?例如
情况1:
堆 = [5,7,7,16,15]
如果我删除 5 并用 15 替换它,我会滴到右边(这是错误的),所以我会滴到左边。
但使用相同的逻辑,如果我有
堆 = [5,7,7,16,15,18]
并且我向左滴流,它将不再是一个有效的堆。
我可以做些什么来确保我有一个有效的堆?
不要紧。
在第一种情况下向右滴流是可以的:
[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]