Gewusst wie: löschen von ein Max-Heap?
Wenn wir 15 in der Wurzel, was wäre der Prozess von heapify?
85
/\
/ \
/ \
55 70
/\ /\
/ \ / \
22 33 30 65
/\ /
14 15 15
Was das sein soll Weg löschen 85 aus dem Heap?
- tech-faq.com/deleting-an-element-from-a-heap.html
- Warum nicht? 15 niedriger ist als 33, so dass die heap-Eigenschaft erfüllt ist.
- OK. Meine Frage war nicht an diesem Punkt. Ich veränderte den Haufen. Versuchen Sie einfach zu löschen 85 und Sag mir, was passiert.
- Hm, du hast Recht. Ich habe den binären Baum-Eigenschaft in Sie als gut.
- Der Haufen ist ok. Die heap-Anwesen ist, dass jeder Elternteil größer ist dann seine Söhne. Dies ist nicht ein binary tree.
- Ich Frage mich, wer von Ihnen positiv bewertet werden "dieser Baum ist nicht ein Haufen"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie immer tauschen es mit dem größeren der beiden (heap-Eigenschaft bedeutet, dass die Eltern immer größer, als seine Kinder):
Wenn Sie löschen 85 und ersetzen Sie es mit 15, biegen Sie die semi-heap wieder zu einem heap durch downheaping, d.h. die 15 an der Wurzel "Waschbecken" auf dem Weg der größeren Kinder. In diesem Fall wird die swap-Partition mit 70 dann mit 65.
Edit: weil wir immer vertauschen mit dem größeren Kind, ist es gewährleistet, dass wir am Ende mit einem gültigen heap (z.B. wenn wir tauschten unsere 15 mit 55 statt 70, hätten wir 70 als ein Kind mit 55 ist das nicht gut)
Fügen Sie den neuen Wert als letztes (Recht auf 20 in deinem Beispiel) und dann versuchen zu beheben heap,, das ist zu vergleichen mit seinen Eltern, wenn es größer ist der swap und vergleichen Sie Sie erneut, bis kein swap benötigt wird (oder root)
Um zu löschen, entfernen Sie Sie ersetzen das Letzte Objekt (15 in Sie Beispiel) an und fixieren Sie den heap nach unten.