Je suis en train de faire une liste de tous les éléments dans un arbre de recherche binaire. Je comprends la récursion , mais je ne sais pas comment le faire revenir chaque valeur et puis ajoutez dans une liste. Je veux créer une fonction appelée makeList()qui retourne une liste de tous les éléments de mon arbre. Toutes les fonctions de mes programmes fonctionnent , sauf la makeList()fonction et sont inclus pour vous assurer que tout le monde comprend la structure de base de la façon dont j'ai créé mon arbre.
class Node(object):
def __init__(self, data):
self.data = data
self.lChild = None
self.rChild = None
class Tree(object):
def __init__(self):
self.root = None
def __str__(self):
current = self.root
def isEmpty(self):
if self.root == None:
return True
else:
return False
def insert (self, item):
newNode = Node (item)
current = self.root
parent = self.root
if self.root == None:
self.root = newNode
else:
while current != None:
parent = current
if item < current.data:
current = current.lChild
else:
current = current.rChild
if item < parent.data:
parent.lChild = newNode
else:
parent.rChild = newNode
def inOrder(self, aNode):
if aNode == None:
pass
if aNode != None:
self.inOrder(aNode.lChild)
print aNode.data
self.inOrder(aNode.rChild)
def makeList(self, aNode):
a = []
self.inOrder(aNode)
a += [aNode.data]
print a
n = Tree()
for i in [4,7,2,9,1]:
n.insert(i)
n.makeList(n.root)
En regardant ma makeList()fonction , je ne vois pas pourquoi cela ne fonctionne pas , mais je ne sais pas comment le faire fonctionner.
MODIFIER
OK j'ai compris! Et j'ai même eu deux réponses qui sont:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
et
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
Et en regardant en arrière, je vois que je ne comprends pas très bien récursion il est temps de frapper les livres! Quelqu'un at-il de bonnes ressources sur récursion?
Une autre question, donc dire que j'appelle ma makeList()fonction. Lorsque Python passe par makeList(), quand il arrive au - self.makeList(aNode.lChild, a)t - il commencer à courir à nouveau la fonction alors qu'il est encore terminé la makeList()fonction ou fait tout arrêter et il commence un peu plus avec son nouveau aNode?
J'espère que cela à du sens.













