Contenido del curso

DFS

BFS

Backtrack

Inorder, Preorder y Postorder en árboles

Resumen

Cuando trabajas con estructuras de datos jerárquicas, entender cómo recorrer un árbol binario es la base para resolver problemas más complejos. Aquí vas a aprender los tres órdenes clásicos de recorrido (inorder, preorder, postorder) y cómo calcular la profundidad de un árbol, una habilidad clave en entrevistas técnicas y algoritmos recursivos.

¿Qué es un recorrido inorder en un árbol binario?

Imagina un nodo A con un hijo izquierdo I y un hijo derecho D. En un árbol binario, cada nodo tiene como máximo dos hijos, y el orden en que los visites cambia por completo el resultado del algoritmo [0:30].

El recorrido inorder sigue una secuencia muy específica: primero procesas el hijo izquierdo, luego el nodo actual y al final el hijo derecho. Es decir, el nodo actual queda "en medio" de sus hijos, y de ahí viene el nombre [1:00].

¿Cuándo conviene usar inorder? Cuando trabajas con árboles binarios de búsqueda, porque devuelve los nodos en orden ascendente de manera natural.

¿Cómo funcionan los recorridos preorder y postorder?

El recorrido preorder invierte la prioridad: primero procesas el nodo actual y después bajas a sus hijos. La lógica es directa: haces los cálculos en el nodo, luego visitas el hijo izquierdo y por último el derecho [1:30].

Si en lugar de un árbol binario tienes un árbol n-ario (con múltiples hijos por nodo), el preorder sigue siendo el mismo: te procesas a ti mismo y luego iteras sobre todos los hijos en un ciclo, sin importar cuántos sean [1:50].

El recorrido postorder hace lo contrario al preorder. Primero atiendes a los hijos (izquierdo, después derecho) y, al final, procesas el nodo actual. Es útil cuando necesitas información de los hijos antes de calcular algo en el padre, como al liberar memoria o evaluar expresiones aritméticas [2:20].

  • Inorder: izquierdo, actual, derecho.
  • Preorder: actual, izquierdo, derecho.
  • Postorder: izquierdo, derecho, actual.

¿Qué es la profundidad de un árbol y cómo se calcula?

La profundidad de un árbol mide la longitud del camino entre nodos, contando cuántos nodos atraviesas para ir de uno a otro. Cuando hablas de la profundidad máxima o diámetro, te refieres al camino más largo desde la raíz hasta una hoja, entendiendo por hoja los nodos que ya no tienen hijos [2:50].

En un ejemplo concreto, un árbol puede tener una hoja a profundidad 2 y otra a profundidad 4. La profundidad mínima sería 2 y la máxima 4 [3:20].

¿Qué diferencia hay entre profundidad mínima y máxima? La mínima es el camino más corto de la raíz a una hoja; la máxima es el más largo. Ambas se calculan con la misma lógica recursiva, cambiando solo si comparas con min o max.

¿Cómo escribir la recursión para calcular la profundidad?

La función recibe una raíz como entrada. El caso base ocurre cuando la raíz es nula: ahí detienes la recursión porque ya no hay nodos que recorrer [3:50].

Dentro de la función, llamas recursivamente a sí misma con raiz.izquierda y guardas el resultado, luego haces lo mismo con raiz.derecha. La recursión baja por el lado izquierdo hasta encontrar un nulo, regresa, y entonces baja por el derecho. Al subir de nuevo, sumas uno por cada nivel atravesado [4:30].

python def profundidad(raiz): if raiz is None: return 0 izquierda = profundidad(raiz.izquierda) derecha = profundidad(raiz.derecha) return max(izquierda, derecha) + 1

Para la profundidad mínima usas min en lugar de max. Si un lado no existe, le sumas uno al otro para evitar contar caminos incompletos [5:10].

¿Y si el árbol no es binario sino n-ario?

La lógica es prácticamente la misma, pero en vez de revisar solo izquierda y derecha, iteras sobre todos los hijos con un ciclo. Mantienes una variable de máxima profundidad y la actualizas cada vez que encuentras un valor mayor al guardado [5:50].

  • Recorres el arreglo de hijos.
  • Llamas recursivamente a profundidad(hijo).
  • Comparas con la máxima registrada y actualizas si es necesario.

Esta misma estructura mental te servirá para resolver problemas como sum root to leaf numbers, donde combinas recorrido y acumulación de valores. ¿Qué orden de recorrido crees que se ajusta mejor a ese problema? Déjalo en los comentarios.