Ik ben op zoek naar een lijst van alle items in een binaire zoekboom te maken. Ik begrijp de recursie, maar ik weet niet hoe je het elke waarde terugkeren en voeg vervolgens het in een lijst. Ik wil een functie genaamd creëren makeList()die een lijst van alle items zal terugkeren in mijn boom. Alle functies in mijn programma's werken met uitzondering van de makeList()functie en zijn opgenomen om ervoor te zorgen dat iedereen begrijpt de basisstructuur van de manier waarop ik mijn boom.
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)
Kijkend naar mijn makeList()functie kan ik zien waarom het niet werkt, maar ik weet niet hoe het te doen werken.
BEWERK
Oke, ik snap het! En ik kreeg zelfs twee antwoorden die zijn:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
en
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
En terugkijkend kan ik zien dat ik niet recursie begrijp heel goed dus het is tijd om de boeken te raken! Iemand enig goede middelen op recursie?
Een andere vraag, zo zeg ik bel mijn makeList()functie. Wanneer Python gaat door makeList(), wanneer het aan het self.makeList(aNode.lChild, a)begint het uitvoeren van de functie opnieuw terwijl het nog steeds afwerking tot de makeList()functie of doet alles stoppen en het begint net iets meer dan met zijn nieuwe aNode?
Ik hoop dat zinvol is.













