Donada la classe heap que permet gestionar Min-Heaps usant memòria dinàmica, cal implementar el mètode
que, en un Min-Heap no buit, elimina l’element més petit del Min-Heap o qualsevol d’ells si està repetit.
La classe heap guarda els elements del Min-Heap en un arbre binari implementat amb memòria dinàmica. Conté dos atributs que guarden el nombre d’elements del Heap (_nelems) i el punter al node arrel de l’arbre binari (_arrel). Cada node de l’arbre binari conté l’element (info) i 3 punters: al fill esquerre (fesq), al fill dret (fdret) i al pare (pare).
Cal enviar a jutge.org la següent especificació de la classe heap i la implementació del mètode dins del mateix fitxer. Indica dins d’un comentari a la capçalera del mètode el seu cost en funció del nombre d’elements del Min-Heap.
Per testejar la solució, jutge.org ja té implementats la resta de mètodes de la classe heap i un programa principal que llegeix un Min-Heap i després crida vàries vegades els mètodes min i elim_min fins que el Min-Heap queda buit.
Entrada
L’entrada consisteix en la descripció dels elements que formen l’arbre binari d’un Min-Heap d’enters (el nombre d’elements seguit pel seu recorregut en preordre). Per exemple, l’arbre (mira el PDF de l’enunciat)
es descriuria amb
14 0 3 6 7 9 5 6 5 1 2 8 4 5 6
Sortida
Una línia amb tots els elements del Min-Heap obtinguts al cridar els mètodes min i elim_min alternativament fins que el Min-Heap queda buit. Cada element està separat amb un espai.
Observació
Només cal enviar la classe requerida i la implementació del mètode elim_min. Pots ampliar la classe amb mètodes privats. Segueix estrictament la definició de la classe de l’enunciat.
Indica dins d’un comentari a la capçalera del mètode el seu cost en funció del nombre d’elements del Min-Heap.
Et pot ser de molta utilitat el mètode privat ultim que calcula aquests dos punters:
Input
1 3
Output
3
Input
2 3 5
Output
3 5
Input
3 3 5 4
Output
3 4 5
Input
0
Output
Input
14 0 3 6 7 9 5 6 5 1 2 8 4 5 6
Output
0 1 2 3 4 5 5 5 6 6 6 7 8 9
Input
11 0 3 6 7 9 5 6 5 1 2 5
Output
0 1 2 3 5 5 5 6 6 7 9