# Definimos la clase Nodo que representa cada nodo del árbol.
# Un nodo tiene un valor y enlaces a su hijo izquierdo y derecho.
class Nodo:
def __init__(self, valor):
self.valor = valor # El valor del nodo (en este caso, un número entero)
self.izquierdo = None # Referencia al hijo izquierdo, inicialmente vacío
self.derecho = None # Referencia al hijo derecho, inicialmente vacío
# Construimos un árbol binario simple con al menos 3 niveles de profundidad.
# Este es un ejemplo de cómo se arma un árbol:
# 1
# / \
# 2 3
# / \ / \
# 4 5 6 7
raiz = Nodo(1) # Nodo raíz con valor 1
raiz.izquierdo = Nodo(2) # Hijo izquierdo de la raíz
raiz.derecho = Nodo(3) # Hijo derecho de la raíz
raiz.izquierdo.izquierdo = Nodo(4) # Hijo izquierdo del nodo 2
raiz.izquierdo.derecho = Nodo(5) # Hijo derecho del nodo 2
raiz.derecho.izquierdo = Nodo(6) # Hijo izquierdo del nodo 3
raiz.derecho.derecho = Nodo(7) # Hijo derecho del nodo 3
# Implementamos una función para recorrer el árbol en preorden.
# En preorden, imprimimos primero el nodo actual, luego el subárbol izquierdo y después el subárbol derecho.
def preorden(nodo):
if nodo is not None: # Verificamos que el nodo no sea vacío
print(nodo.valor, end=' ') # Imprimimos el valor del nodo actual
preorden(nodo.izquierdo) # Llamamos a la función para recorrer el hijo izquierdo
preorden(nodo.derecho) # Llamamos a la función para recorrer el hijo derecho
# Ejecutamos la función preorden para imprimir los valores del árbol.
print("Recorrido en preorden del árbol:")
preorden(raiz) # Debería imprimir: 1 2 4 5 3 6 7