Comment obtenir des nœuds feuilles de l'arbre à l'aide de Python?

Salut à tous, je suis nouveau sur OOP donc avoir cela à l'esprit pendant que vous êtes de lire ceci.

J'ai un simple Python arbre de la mise en œuvre(voir code ci-dessous).

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)

Ce dont j'ai besoin maintenant est de mettre en œuvre une méthode pour obtenir les Nœuds Feuilles en arrière. Par le terme nœud feuille je veux dire un nœud qui n'a pas d'enfants.

Je me demandais comment faire un get_leaf_nodes() méthode.

Certaines solutions me viennent à l'esprit sont

  1. Faire un self.leaf_nodes = [] à l'intérieur de la __init__ méthode. En faisant cela, je sais que ça va être vu que par cet arbre instance.
  2. Faire un membre de la classe leaf_nodes = [] ci-dessus __init__ méthode. En faisant cela, je sais tout l'arbre des instances seront en mesure de voir leaf_nodes liste.

Les solutions ci-dessus me poussera à créer un leaf_nodes liste à l'intérieur de ma classe afin que les get_leaf_nodes() méthode pourrait utiliser. Ce que je cherche, c'est d'avoir seulement un get_leaf_nodes() méthode qui vous permettra d'effectuer le calcul sur mon arbre et retourne une liste.

Par exemple en C, nous aurions appel malloc() et alors nous pourrions retourner le pointeur vers la fonction qui a appelé la get_leaf_nodes().

Habituellement, vous devez utiliser la récursivité pour résoudre ce problème. stackoverflow.com/questions/479343/...
Je sais que sur la récursivité. Je l'ai utilisé déjà à preorder_trav() la méthode aussi. Le truc, c'est que la OO problème de Conception que j'ai. Dois-je faire une liste à l'intérieur de ma classe ou il y a un moyen de retourner la liste des nœuds feuilles sans faire à l'intérieur de init ou en tant que membre de la classe?

OriginalL'auteur limitcracker | 2014-01-08