¿Cómo obtener nodos de hoja de un árbol usando Python?

Hola, soy nuevo en OOP, así que ten esto en cuenta mientras lees esto.

Tengo una implementación simple en el árbol de Python (ver el código a continuación).

class TreeNode(object):
    def __init__(self, data):
        self.data = data
        self.children = []

    def add_child(self, obj):
        self.children.append(obj)

class Tree:
    def __init__(self):
        self.root = TreeNode('ROOT')

    def preorder_trav(self, node):
        if node is not None:
            print node.data
            if len(node.children) == 0:
                print "("+ node.data + ")"
                for n in node.children:
                    self.preorder_trav(n)

if __name__ == '__main__':
    tr = Tree()
    n1 = tr.root
    n2 = TreeNode("B")
    n3 = TreeNode("C")
    n4 = TreeNode("D")
    n5 = TreeNode("E")
    n6 = TreeNode("F")

    n1.add_child(n2)
    n1.add_child(n3)
    n2.add_child(n4)
    n2.add_child(n5)
    n3.add_child(n6)

    tr.preorder_trav(n1)

Lo que necesito ahora es implementar un método para recuperar los Nodos Leaf. Por el terminonodo de la hoja Me refiero a un nodo que no tiene hijos.

Me pregunto cómo hacer unget_leaf_nodes () método.

Algunas soluciones que vienen a mi mente son

Haciendo unself.leaf_nodes = [] dentro de__init__ método. Al hacer esto, sé que solo será visto por esta instancia de árbol.Haciendo un miembro de la claseleaf_nodes = [] encima__init__ método. Al hacer esto, sé que todas las instancias del árbol podrán ver la lista de leaf_nodes.

Las soluciones anteriores harán que cree una lista de leaf_nodes dentro de mi clase para queget_leaf_nodes() método podría utilizar. Lo que busco es tener solo unget_leaf_nodes() Método que hará el cálculo en mi árbol y devolverá una lista.

Por ejemplo en C llamaríamosmalloc() y luego podríamos devolver el puntero a la función que llamó elget_leaf_nodes().

Respuestas a la pregunta(3)

Su respuesta a la pregunta