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
- 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. - 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()
.
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
Vous devez vous connecter pour publier un commentaire.
En python, vous pouvez utiliser une fonction interne à recueillir les nœuds feuilles, puis retourner la liste d'entre eux.
Si vous voulez un plus propre approche de la programmation orientée objet, vous pouvez créer un supplément de méthode privée pour la collecte des feuilles:
C'est la façon dont je le ferais en Java.
(a) Non, il n'est pas "propre" à l'approche de la programmation orientée objet, mais pourquoi utiliser python si vous ne voulez pas TOUT le pouvoir à l'intérieur ;), d'ailleurs à partir d'un client du point de vue de votre objet se comporte comme un "nettoyage" de la programmation orientée objet objet (b)
leafs = []
crée un nouvel objet de typelist
et attribuer une référence à la variableleaf
alors quand vous revenez vous êtes juste de retour d'une référence à l'objet de la liste, qui python continue le tour jusqu'à ce qu'aucune référence ne pouvait y accéder (python utilise le garbage collector approche de la programmation orientée objet)Merci pour votre explication à mes questions. J'aime votre réponse. Je vais attendre pour plus de réponses et puis je ll accepter 🙂
Vous êtes les bienvenus 🙂
OriginalL'auteur Alvaro Fuentes
Cette méthode devrait être suffisant pour obtenir le laisse accessible à partir de n'importe quel nœud, si vous l'appelez, avec la racine de votre arbre, vous obtiendrez toutes les feuilles de l'arbre:
OriginalL'auteur avenet
L'un des bons récursive approche pour trouver des feuilles.
OriginalL'auteur technazi
Je pense que les précédents contributeurs ont répondu à cette question correctement, mais personne n'a vraiment montré comment configurer les nœuds et ajouter ces valeurs à l'arbre, puis de l'exécuter à démontrer qu'il fonctionne en fait tous ensemble. C'est pourquoi je vais répondre à cette question:
OriginalL'auteur grepit