Fhernd icon

arbol_aleatorio_orden.py

Fhernd | PRO | 02/13/26 05:47:33 PM UTC | 0 ⭐ | 13626 👁️ | Never ⏰ | []
Python |

2.7 KB

|

Source Code

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎