Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2023/2024

Solución del ejercicio 9.g del tema 3

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.

Solución 1

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;
   }
}
	

Solución 2

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;
}