Aqui es donde entiendes para que existe la recursion.
Estructuras que se contienen a si mismas
Un arbol binario es un nodo con dos arboles binarios adentro. Una carpeta es un nombre con carpetas adentro. Una lista enlazada es un nodo seguido de una lista enlazada.
Cuando la estructura es recursiva, el algoritmo recursivo no es una opcion elegante: es la traduccion directa de la definicion. Escribirlo con bucles es traducirlo mal.
Los tres recorridos de un arbol
Y aqui vuelve el nivel 2. La unica diferencia entre los tres recorridos es donde pones la visita respecto a las dos llamadas recursivas.
static void inorden(Nodo n) {
if (n == null) return;
inorden(n.izq);
visitar(n); // en el medio
inorden(n.der);
}
// preorden : visitar ANTES de las dos llamadas
// postorden: visitar DESPUES de las dos llamadas
En un arbol binario de busqueda, el recorrido inorden devuelve los valores ordenados de menor a mayor. Salio gratis.
El caso base es null
En estructuras el caso base casi nunca es un numero. Es "ya no hay nada": null, lista vacia, indice fuera del arreglo. Ponerlo de primero y devolver de inmediato evita la mitad de los NullPointerException.
Ejecuta y observa
Cambia los parametros, dale a Reproducir, y usa las flechas para avanzar
paso a paso. La pila crece hacia arriba: el marco de arriba es el que se
esta ejecutando ahora mismo.
Errores que vas a cometer
Lee el codigo, decide que esta mal, y despues abre la correccion.
Comprobar el hijo en vez del nodo actual
static void recorrer(Nodo n) {
visitar(n);
if (n.izq != null) recorrer(n.izq);
if (n.der != null) recorrer(n.der);
}
Funciona, pero se rompe si alguien llama recorrer(null) desde fuera, y duplica la comprobacion en cada hijo. Es mas fragil y mas largo.
static void recorrer(Nodo n) {
if (n == null) return; // una sola guarda, al inicio
visitar(n);
recorrer(n.izq);
recorrer(n.der);
}
Comprueba lo que entendiste
Necesitas el 70% para dar el nivel por visto. Responde sin devolverte a la teoria:
si fallas, la explicacion te dice exactamente donde estaba el hueco.