import random
class ArbolNumerico:
def __init__(self, cantidad=10, minimo=1, maximo=100):
self.valores_originales = [random.randint(minimo, maximo) for _ in range(cantidad)]
self.raiz = None
# ==============================
# MÉTODO PRINCIPAL DE ORDENAMIENTO
# ==============================
def ordenar_como_bst(self):
"""
Construye el árbol binario de búsqueda
insertando los valores uno por uno.
"""
self.raiz = None
for valor in self.valores_originales:
self.raiz = self._insertar(self.raiz, valor)
# ==============================
# MÉTODOS AUXILIARES
# ==============================
def _insertar(self, nodo, valor):
"""
Inserta un valor respetando la propiedad BST:
menores a la izquierda, mayores a la derecha.
"""
if nodo is None:
return {"valor": valor, "izq": None, "der": None}
if valor < nodo["valor"]:
nodo["izq"] = self._insertar(nodo["izq"], valor)
else:
nodo["der"] = self._insertar(nodo["der"], valor)
return nodo
def recorrido_inorden(self, nodo=None, resultado=None):
"""
Devuelve los valores ordenados (in-order traversal).
"""
if resultado is None:
resultado = []
if nodo is None:
nodo = self.raiz
if nodo:
self.recorrido_inorden(nodo["izq"], resultado)
resultado.append(nodo["valor"])
self.recorrido_inorden(nodo["der"], resultado)
return resultado
def mostrar_estructura(self, nodo=None, nivel=0):
"""
Muestra el árbol de forma jerárquica.
"""
if nodo is None:
nodo = self.raiz
if nodo:
self.mostrar_estructura(nodo["der"], nivel + 1)
print(" " * nivel + str(nodo["valor"]))
self.mostrar_estructura(nodo["izq"], nivel + 1)
# ==============================
# FUNCIÓN AUXILIAR DE ENTRADA
# ==============================
@staticmethod
def main():
print("=== CREACIÓN DEL ÁRBOL CON VALORES ALEATORIOS ===")
arbol = ArbolNumerico(cantidad=10)
print("Valores originales:")
print(arbol.valores_originales)
print("\n=== ORDENANDO COMO ÁRBOL BINARIO DE BÚSQUEDA ===")
arbol.ordenar_como_bst()
print("\nEstructura del árbol:")
arbol.mostrar_estructura()
print("\nRecorrido inorden (resultado ordenado):")
print(arbol.recorrido_inorden())
# Ejecutar
if __name__ == "__main__":
ArbolNumerico.main()
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎