Ich versuche , eine Liste aller Elemente in einem binären Suchbaum zu machen. Ich verstehe die Rekursion , aber ich weiß nicht , wie es machen jeden Wert zurückgeben und sie dann in eine Liste anhängen. Ich möchte eine Funktion erstellen genannt , makeList()die eine Liste aller Elemente in meinem Baum zurück. Alle Funktionen in meinen Programmen arbeiten mit Ausnahme der makeList()Funktion und sind eingeschlossen , um sicherzustellen , dass jeder versteht die Grundstruktur , wie ich meinen Baum.
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)
Ein Blick auf meine makeList()Funktion kann ich sehen , warum es nicht funktioniert , aber ich weiß nicht , wie es funktioniert.
BEARBEITEN
OK ich habe es! Und ich habe auch zwei Antworten, die sind:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
und
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
Und im Rückblick kann ich sehen, dass ich nicht verstehe, Rekursion sehr gut, so ist es Zeit, die Bücher zu schlagen! Wer noch keine gute Ressourcen auf Rekursion?
Eine andere Frage, so sage ich meine nennen makeList()Funktion. Wenn Python durchgeht makeList(), wenn es um die bekommt self.makeList(aNode.lChild, a)beginnt wieder die Funktion ausgeführt wird, während es noch ist die Finishing - makeList()Funktion oder stoppt alles und es beginnt etwas mehr als mit ihm ist neu aNode?
Ich hoffe das ergibt Sinn.













