Jeg prøver å lage en liste over alle elementer i et binært søketre. Jeg forstår rekursjon, men jeg vet ikke hvordan du gjør det tilbake hver verdi, og deretter legge den inn i en liste. Jeg ønsker å lage en funksjon som kalles makeList()som vil returnere en liste over alle elementene i min treet. Alle funksjonene i mine programmer fungerer unntatt makeList()funksjon og er inkludert for å sørge for at alle forstår den grunnleggende strukturen for hvordan jeg setter opp min treet.
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)
Ser på min makeList()funksjon jeg kan se hvorfor det ikke fungerer, men jeg vet ikke hvordan å gjøre det arbeidet.
REDIGERE
Ok jeg forstår! Og jeg fikk til og med to svar som er:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
og
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
Og ser tilbake jeg kan se at jeg ikke forstår rekursjon veldig godt, så det er på tide å treffe bøkene! Alle som har noen gode ressurser på rekursjon?
Et annet spørsmål, så sier jeg ringe min makeList()funksjon. Når Python går gjennom makeList(), når det kommer til den self.makeList(aNode.lChild, a)ikke begynner det å kjøre funksjonen igjen mens den er fortsatt etterbehandling opp makeList()funksjon eller ikke alt stopper og det bare starter på nytt med det nye aNode?
Jeg håper det er fornuftig.













