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()