Recursividad en Java
Nivel 4 · 40 min

Recursion sobre estructuras

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);
}

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.