Куча, метод просачивания
Я сейчас делаю максимальную кучу. Когда я использую метод remove(), я понимаю, что я бы поменялся с большими детьми. Что если оба ребенка имеют одинаковый приоритет? например
Случай 1:
куча = [5,7,7,16,15]
если я уберу 5 и заменю его на 15, я бы стекал вправо (что неправильно), поэтому я бы стекал в левую сторону.
но используя ту же логику, если у меня есть
куча = [5,7,7,16,15,18]
и я стекаю влево, это больше не будет действительной кучей.
Что я могу сделать, чтобы у меня была допустимая куча?
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]