Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2023/2024

Solución del ejercicio 5 del tema 3

bool Conjunto::noHayHijoSinHermano() const {
   return raiz == nullptr || noHayHijoSinHermano(raiz);
}

bool Conjunto::noHayHijoSinHermano(Nodo * n) const {
   if (n->izquierdo == nullptr && n->derecho == nullptr)
      return true;
   if (n->izquierdo != nullptr && n->derecho != nullptr)
      return noHayHijoSinHermano(n->izquierdo) && noHayHijoSinHermano(n->derecho);
   return false;
}
      

Otra forma de expresar lo mismo es:

bool Conjunto::noHayHijoSinHermano() const {
   return raiz == nullptr || noHayHijoSinHermano(raiz);
}

bool Conjunto::noHayHijoSinHermano(Nodo * n) const {
   return (n->izquierdo == nullptr && n->derecho == nullptr)
          || (n->izquierdo != nullptr
              && n->derecho != nullptr
              && noHayHijoSinHermano(n->izquierdo)
              && noHayHijoSinHermano(n->derecho));
}
      

Ambas versiones tienen coste temporal O(n), siendo n la cantidad de nodos del árbol.