Я пишу функцию, которая должна удалить узел root из maxheap, представленного списком. У меня проблемы с переупорядочением, чтобы удовлетворить свойство maxheap после удаления узла root. Вот мой код:
def deleteMax(x):
x.pop(0)
curr = self.heap[0]
rootindex = 0
leftchild = rootindex*2+1
rightchild = rootindex*2+2
while current < x[leftchild] or current < x[rightchild] :
if current < leftchild :
x[rootindex ], x[leftchild] = x[leftchild], x[rootindex ]
rootindex = leftchild
else:
x[rootindex ], x[rightchild] = x[rightchild], x[rootindex ]
rootindex = rightchild
return x
Пример
x = []
Вставка - это моя функция вставки, которая вставляет значения в правильном порядке. Просто предположите, что я вставляю правильно
вставка (10)
вставка (5)
вставка (14)
вставка (9)
вставка (2)
вставка (11)
вставка (6)
Итак: x = [14, 9, 11, 5, 2, 10, 6] (что правильно)
Но когда я вызываю deleteMax (), он удаляет 14 отлично, но у меня остается:
[9, 11, 5, 2, 10, 6]
Когда я хочу, чтобы это было так, чтобы удовлетворить свойство maxheap и сделать его таким:
[11, 9, 10, 5, 2, 6]