In [26]:
class NodoBB:
    izq , der, dato = None, None, 0
 
    def __init__(self, dato):
        self.izq = None
        self.der = None
        self.dato = dato

        
class ArbolBB:
    def __init__(self):
        self.raiz = None
 
    def agregarNodo(self, dato):
        # crea un nuevo nodo y lo devuelve
        return Nodo(dato)
 
    def insertar(self, dato):
        
        # Funcion de ayuda (anónima) y recursiva para recorrer el Arbol
        def recorrer(nodo):
            if dato < nodo.dato:
                if nodo.izq is None:
                    nodo.izq = NodoBB(dato)
                else:
                    recorrer(nodo.izq)
            # Entonces el dato a insertar es mayor que el nodo actual
            elif nodo.der is None:
                nodo.der = NodoBB(dato)
            else:
                recorrer(nodo.der)
                
        # Si el árbol está vacio inserta un dato nuevo en el árbol
        if self.raiz is None:
            self.raiz = NodoBB(dato)
        else:
            # si hay nodos en el árbol lo recorre
            recorrer(self.raiz)
            
    def __str__(self):
        """ Presentacion en formato string """
        def recorrer(nodo, nivel):
            s = ""
            if nodo is not None:
                if nodo == self.raiz:
                    s = str(self.raiz.dato) + "\n"
                else:
                    s = (" " * (nivel - 1)) + ("|__") + str(nodo.dato) + "\n" 
                s += recorrer(nodo.izq, nivel + 1)
                s += recorrer(nodo.der, nivel + 1)
            return s
        
        return recorrer(self.raiz, 0)
    
    def buscar(self, dato):
        pass

In [27]:
arbol = ArbolBB()
arbol.insertar('D')
arbol.insertar('B')
arbol.insertar('A')
arbol.insertar('C')
arbol.insertar('F')
arbol.insertar('E')
arbol.insertar('G')
print (arbol)


D
|__B
 |__A
 |__C
|__F
 |__E
 |__G


In [11]:
arbol.raiz.der.dato


Out[11]:
'F'