Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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()
Advertisement