================================================================= Algoritmos y Estructuras de Datos (VJ1215) - Universitat Jaume I Evaluacion continua - 2023/2024 17 de noviembre de 2023 Ejercicio 3.a Borrador ================================================================= Solucion 1 (recomendada) ======================== void Conjunto::eliminarHojas(Nodo * & n) { if (n != nullptr) { if (n->izquierdo == nullptr && n->derecho == nullptr) { delete n; n = nullptr; } else { eliminarHojas(n->izquierdo); eliminarHojas(n->derecho); } } } void Conjunto::eliminarHojas() { eliminarHojas(raiz); } Solucion 2 ========== void Conjunto::eliminarHojas(Nodo * n){ if (n->izquierdo != nullptr) if (n->izquierdo->izquierdo == nullptr && n->izquierdo->derecho == nullptr) { delete n->izquierdo; n->izquierdo = nullptr; } else eliminarHojas(n->izquierdo); if (n->derecho != nullptr) if (n->derecho->izquierdo == nullptr && n->derecho->derecho == nullptr) { delete n->derecho; n->derecho = nullptr; } else eliminarHojas(n->derecho); } void Conjunto::eliminarHojas(){ if (raiz != nullptr) if (raiz->izquierdo == nullptr && raiz->derecho == nullptr) { delete raiz; raiz = nullptr; } else eliminarHojas(raiz); } Solucion 3 ========== Conjunto::Nodo * Conjunto::eliminarHojas(Nodo * n) { if (n != nullptr) { if (n->izquierdo == nullptr && n->derecho == nullptr) { delete n; n = nullptr; } else { n->izquierdo = eliminarHojas(n->izquierdo); n->derecho = eliminarHojas(n->derecho); } } return n; } void Conjunto::eliminarHojas() { raiz = eliminarHojas(raiz); } Solucion 4 ========== void Conjunto::eliminarHojas(Nodo * n, Nodo * padre) { if (n != nullptr) if (n->izquierdo == nullptr && n->derecho == nullptr) { if (n == raiz) raiz = nullptr; else if (n == padre->izquierdo) padre->izquierdo = nullptr; else padre->derecho = nullptr; delete n; } else { eliminarHojas(n->izquierdo, n); eliminarHojas(n->derecho, n); } } void Conjunto::eliminarHojas() { eliminarHojas(raiz, nullptr); } Solucion 5 ========== bool Conjunto::eliminarHojas(Nodo * n) { if (n == nullptr) return false; if (n->izquierdo == nullptr && n->derecho == nullptr) { delete n; return true; } else { if (eliminarHojas(n->izquierdo)) n->izquierdo = nullptr; if (eliminarHojas(n->derecho)) n->derecho = nullptr; return false; } } void Conjunto::eliminarHojas() { if (eliminarHojas(raiz)) raiz = nullptr; }