Comment faire pour supprimer à partir d'un Max-Heap?
Si nous avons mis 15 dans la racine, quel serait le processus de heapify?
85
/\
/ \
/ \
55 70
/\ /\
/ \ / \
22 33 30 65
/\ /
14 15 15
Ce que devrait être la façon de le supprimer de 85 dans le Tas?
- tech-faq.com/deleting-an-element-from-a-heap.html
- Pourquoi pas? 15 est inférieur à 33, de sorte que le segment de mémoire-propriété est satisfaite.
- OK. Ma question n'était pas à ce point. J'ai modifié le tas. Juste essayer de supprimer 85 et dites-moi ce qui se passe.
- Hm, vous avez raison. J'ai ajouté de l'arbre binaire de la propriété ainsi.
- Le tas est ok. Le tas propery est que chaque parent est plus grande que son fils. Ce n'est pas un arbre binaire.
- Je me demande qui upvoted "que l'arbre n'est pas un tas de"
Vous devez vous connecter pour publier un commentaire.
Que vous êtes toujours en échangeant avec la plus grande des deux (le segment de la propriété signifie que le parent est toujours plus grand que ses enfants):
Si vous supprimez 85 et de le remplacer avec de 15, vous tournez le demi-segment de retour dans un segment de mémoire par downheaping, c'est à dire le 15 à la racine de "puits" sur le chemin de grands enfants. Dans ce cas, il va échanger avec 70, puis à 65 ans.
Edit: parce que nous sommes toujours permuter avec le plus grand enfant, il nous permet de retrouver avec un valide tas (par exemple, si nous avons échangé nos 15 à 55 au lieu de 70, on aurait 70 comme un enfant de 55 ans qui n'est pas bon)
Pour ajouter vous mettez la nouvelle valeur en dernier (droit à 20 dans votre exemple), et puis vous essayez de résoudre le tas, c'est-à comparer avec ses parents, si elle est plus grande que le swap et les comparer à nouveau jusqu'à ce qu'aucun swap n'est pas nécessaire (ou vous obtenir à la racine)
Afin de supprimer vous vous retirer de remplacer le dernier objet (15 en vous exemple) et de fixer le tas à la baisse.