Правила удаления корневого узла из двоичной кучи:
- Замена корневого узла самым нижним, самым правым элементом в куче.
- Уменьшение количества.
- Сдвиньте новое значение вниз кучи в новую позицию.
Например, для вашего массива [90, 80, 80, 40, 10, 20, 50]
у вас есть куча:
90
80 80
40 10 20 50
Вы удаляете 90 и заменяете на 50, давая вам:
50
80 80
40 10 20
Теперь вы просеиваете вниз.Правила для просеивания таковы, что вы должны поменяться с самым большим из двух детей.В этом случае двое детей равны, поэтому вы можете поменяться с любым из них.Результатом является допустимая куча в любом случае.80 находится сверху, и два узла на следующем уровне либо [80, 50], либо [50, 80].
Причина, по которой вы выбираете самый нижний, самый правый элемент,сохранить свойство кучи.Помните: куча - это полное двоичное дерево со всеми полностью заполненными уровнями, за исключением, возможно, последнего, заполненного слева.Позвольте мне показать вам немного другую кучу, где это может вызвать проблемы:
90
66 74
65 11 70 50
Теперь, если вы должны были заменить 90 на 65, первая проблема, которую вы имеете, это дыра в вашем массиве.То есть у вас будет [65, 66, 74, __, 11, 70, 50]
.Это было бы достаточно легко исправить, переместив все, что находится за пределами пустого пространства, в левое, и вы получите [65, 66, 74, 11, 70, 50]
Но теперь давайте рассмотрим это как кучу:
65
66 74
11 70 50
Правила отсеивания говорят, что вы должны поменяться с самым большим ребенком.В данном случае это 74. Но если вы сделаете это, вы получите недопустимую кучу:
74
66 65
11 70 50
И вы не можете просто решить поменяться с младшим ребенком, потому что если вы это сделаете, то 66 будеткорень.В любом случае вы получите недопустимую кучу.
Существует две причины, по которым вы заменяете корень на самый нижний, самый правый узел (последний элемент в массиве):
- Корректность.Удаляя последний элемент, вы гарантированно не будете влиять на отношения любых других узлов.Удаление из любого другого места может сделать недействительной кучу.
- Эффективность.Удалить последний элемент из массива тривиально.Удаление из любого другого места потенциально является операцией O (n).