1. Se desea realizar un algoritmo que elimine los nodos de niveles inferiores a un nivel dado (nivel), que se pasa como parámetro. (NOTA: el nivel del nodo raíz es 1 y n se ha inicializado a 1). Para ello se proponen dos soluciones: Solución 1: static NodoArbol eliminarNodos1 (NodoArbol arbol, int n, int nivel) { if (arbol != null) { if (n < nivel) arbol = null; arbol.iz = eliminarNodos1 (arbol.iz, n, nivel + 1); arbol.de = eliminarNodos1 (arbol.de, n, nivel + 1); } return arbol; } Solución 2: static NodoArbol eliminarNodos2 (NodoArbol arbol, int n, int nivel) { if (arbol != null) { arbol.iz = eliminarNodos2 (arbol.iz, n, nivel + 1); arbol.de = eliminarNodos2 (arbol.de, n, nivel + 1); if (n < nivel) arbol = null; } return arbol; } ¿Cuál de las siguientes afirmaciones es verdadera? A. La solución 2 es correcta, la solución 1 no lo es. B. La solución 1 es correcta, la solución 2 no lo es. C. Ambas soluciones son correctas. El resultado no depende de la modalidad de recorrido. 2. Se desea implementar un algoritmo que muestre las claves de un árbol mediante un recorrido en amplitud (de arriba hacia abajo y de izquierda a derecha). ¿Qué estructura de datos auxiliar se necesita? A. Una pila. B. Una lista reorganizable. C. Una cola. 3. El siguiente método recibe como argumento un árbol y pretende devolver un valor booleano indicando si el árbol binario es de búsqueda o no: static class arbolBusqueda { static int ant; static boolean esBusqueda (NodoArbol arbol, boolean primero) { boolean resul = false; if (arbol == null) resul = true; else { resul = esBusqueda (arbol.iz, primero); if (primero) primero = false; else if (arbol.clave <= ant) resul = false; if (resul) { ant = arbol.clave; resul = esBusqueda (arbol.de, primero); } } return resul; } static boolean esBusqueda (Arbol a) { return esBusqueda (a.raiz, true); } } Seleccione una respuesta. A. Funciona correctamente. B. No funciona correctamente: el recorrido del árbol se debe hacer en preorden. C. No funciona correctamente: el argumento primero debería ser una variable miembro de la clase Busqueda. 4. Desarrollar un método que cuente los nodos de un árbol binario. Soluciones: Pregunta Respuesta Justificación 1 A La solución 1 producirá un error de ejecución cuando se intente continuar con la llamada: arbol.iz = eliminarNodos1 (arbol.iz, n, nivel + 1); después de eliminar un nodo (ya que arbol == null). 2 C Se realizará un recorrido en amplitud si utilizamos una cola. Una pila produciría un recorrido en preorden. 3 C El argumento primero sólo debe tomar el valor true la primera vez. En caso de pasarlo por valor “recordará” que tuvo el valor true cuando vuelva a pasar por la raíz para iniciar el recorrido por el subárbol (primario) derecho y, en ese caso, no realizará la comparación con el valor anterior (arbol.clave <= ant). 4 Una posible solución sería: static int cuentaNodos (NodoArbol arbol) { int resul = 0; if (arbol != null) resul = 1 + cuentaHojas (arbol.iz) + cuentaHojas (arbol.de); return resul; }