to get the file

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