Curso 2023/2024
Compara las dos soluciones siguientes y elige la que prefieras.
El orden en que se liberan los nodos en estas soluciones es el de un recorrido en postorden: se elimina cada nodo después de haber eliminado los de su subárbol izquierdo y los de su subárbol derecho.
Observa que no es necesario pasar n
por
referencia. La instrucción delete n
libera la
memoria que indica n
, pero no modifica el valor
de n
.
¿Por qué no es necesario poner nullptr
en
los atributos de cada nodo, pero sí que es necesario
dejar nullptr
en la raíz? Recuerda esto.
void Conjunto::vaciar() { vaciar(raiz); raiz = nullptr; laTalla = 0; } void Conjunto::vaciar(Nodo * n) { if (n != nullptr) { vaciar(n->izquierdo); vaciar(n->derecho); delete n; } }
void Conjunto::vaciar() { if (raiz != nullptr) { vaciar(raiz); raiz = nullptr; laTalla = 0; } } void Conjunto::vaciar(Nodo * n) { if (n->izquierdo != nullptr) vaciar(n->izquierdo); if (n->derecho != nullptr) vaciar(n->derecho); delete n; }