class Nodo: def __init__(self, dato): self.info = dato self.Li = None self.Ld = None class Arbol: def __init__(self, dato): self.raiz = Nodo(dato) # ----------------- Funciones recursivas --------------------------- def __agregar_(self, nodo, dato): if dato < nodo.info: if nodo.Li is None: nodo.Li = Nodo(dato) else: self.__agregar_(nodo.Li, dato) else: if nodo.Ld is None: nodo.Ld = Nodo(dato) else: self.__agregar_(nodo.Ld, dato) def __inorden_(self, nodo): if nodo is not None: self.__inorden_(nodo.Li) print(nodo.info, end=", ") self.__inorden_(nodo.Ld) def __preorden_(self, nodo): if nodo is not None: print(nodo.info, end=", ") self.__preorden_(nodo.Li) self.__preorden_(nodo.Ld) def __postorden_(self, nodo): if nodo is not None: self.__postorden_(nodo.Li) self.__postorden_(nodo.Ld) print(nodo.info, end=", ") def __buscar_(self, nodo, busqueda): if nodo is None: return None if nodo.info == busqueda: return nodo if busqueda < nodo.info: return self.__buscar_(nodo.Li, busqueda) else: return self.__buscar_(nodo.Ld, busqueda) # ----------------- Funciones públicas ----------------------------- def Agregar(self, dato): self.__agregar_(self.raiz, dato) def Inorden(self): print("Árbol Inorden: ") self.__inorden_(self.raiz) print("") print("") def Preorden(self): print("Árbol Preorden: ") self.__preorden_(self.raiz) print("") print("") def Postorden(self): print("Árbol Postorden: ") self.__postorden_(self.raiz) print("") print("") def Buscar(self, busqueda): return self.__buscar_(self.raiz, busqueda) arbol = Arbol(100) arbol.Agregar(50) arbol.Agregar(150) arbol.Agregar(25) arbol.Agregar(175) arbol.Agregar(10) arbol.Agregar(5) arbol.Inorden() arbol.Preorden() arbol.Postorden()