Recorrido Inorden en Árboles Binarios: Implementaciones Iterativa y Recursiva

Recorrido Inorden en Árboles Binarios

El recorrido inorden es un patrón de visita para árboles binarios donde cada nodo se procesa siguiendo el orden: subárbol izqiuerdo, nodo actual y subárbol derecho. Esta secuencia se aplica de manera recursiva a todas las ramas del árbol.

Implementación Iterativa

Para ejecutar el recorrido inorden sin recursión explícita, se emplea una pila para emular la pila de llamadas. El algoritmo inicia desde la raíz y itera: mientras exista un nodo actual o la pila no esté vacía, se apilan todos los nodos izquierdos accesibles. Posteriormente, se extrae un nodo de la pila, se visita, y se continúa con su subárbol derecho.

Ejemplo de Código en Python


def inorder_iterative(root):
    traversal_result = []
    node_stack = []
    current_node = root
    while current_node or node_stack:
        while current_node:
            node_stack.append(current_node)
            current_node = current_node.left
        current_node = node_stack.pop()
        traversal_result.append(current_node.val)
        current_node = current_node.right
    return traversal_result

Enfoque Recursivo

La versión recursiva sigue directamente la definición: primero se recorre el subárbol izquierdo, luego se accede al nodo raíz y finalmente se recorre el subárbol derecho. La condición de terminación se alcanza cuando el nodo es nulo.

Código Recursivo


def inorder_recursive(root):
    if root is None:
        return []
    left_part = inorder_recursive(root.left)
    current_value = [root.val]
    right_part = inorder_recursive(root.right)
    return left_part + current_value + right_part

Árbol de Ejemplo y Verificación

Se construye un árbol con raíz en 5, hijo derecho en 8, y el hijo izquierdo de 8 es 6. El recorrido inorden produce la secuencia [5, 6, 8].

Construcción del Árbol


class TreeNode:
    def __init__(self, value):
        self.val = value
        self.left = None
        self.right = None

tree_root = TreeNode(5)
tree_root.right = TreeNode(8)
tree_root.right.left = TreeNode(6)

Prueba de Funcionalidad


print(inorder_recursive(tree_root))  # Resultado: [5, 6, 8]
print(inorder_iterative(tree_root))  # Resultado: [5, 6, 8]

Aplicaciones Prácticas

El recorrido inorden es esencial en árboles de búsqueda binaria (BST), ya que dveuelve los valores en orden ascendente. Esto habilita funcionalidades como:

  • Validar la propiedad BST comprobando que la secuencia sea monotónicamente creciente.
  • Extraer una lista ordenada de elemenots sin ordenamiento adicional.
  • Localizar el k-ésimo elemento menor recorriendo hasta el k-ésimo nodo visitado.

Etiquetas: arbol-binario recorrido-inorden pila recursividad Python

Publicado el 6-30 19:37