# Clase Nodo para representar cada estudiante con su promedio
class Nodo:
def __init__(self, nombre, promedio):
self.nombre = nombre
self.promedio = promedio
self.izq = None
self.der = None
# Función para insertar un nuevo estudiante en el árbol
def insertar_nodo(raiz, nombre, promedio):
# Si el árbol está vacío, crea un nuevo nodo
if raiz is None:
return Nodo(nombre, promedio)
# Si el promedio es menor, insertarlo en el subárbol izquierdo
if promedio < raiz.promedio:
raiz.izq = insertar_nodo(raiz.izq, nombre, promedio)
# Si el promedio es mayor o igual, insertarlo en el subárbol derecho
else:
raiz.der = insertar_nodo(raiz.der, nombre, promedio)
return raiz
# Función para realizar un recorrido en inorden
def recorrido_inorden(nodo):
if nodo:
# Primero recorre el subárbol izquierdo
recorrido_inorden(nodo.izq)
# Luego procesa el nodo actual
print(f"{nodo.nombre}: {nodo.promedio}")
# Finalmente recorre el subárbol derecho
recorrido_inorden(nodo.der)
# Lista de estudiantes con sus promedios
estudiantes = [
("Ana", 85),
("Carlos", 92),
("Elena", 88),
("Jorge", 79),
("Luis", 95),
("María", 82),
]
# Construcción del árbol binario de búsqueda
raiz = None
for nombre, promedio in estudiantes:
raiz = insertar_nodo(raiz, nombre, promedio)
# Mostrar los estudiantes en orden ascendente de promedio
print("Estudiantes en orden ascendente por promedio:")
recorrido_inorden(raiz)