Bir ikili arama ağacında tüm öğelerin bir listesini yapmaya çalışıyorum. Ben Özyinelemeyi anlıyorum ama her değer döndürmek ve daha sonra bir liste halinde ekler nasıl bilmiyorum. Ben adlı bir işlev oluşturmak istiyorum makeList()benim ağaçtaki tüm öğelerin bir listesini döndürür. Benim programlarında Tüm fonksiyonlar dışında çalışmak makeList()fonksiyonu ve herkesin ağacımı kurmak nasıl temel yapısını anlamasını sağlamak için dahil edilmiştir.
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)
Benim baktığımızda makeList()çalışmıyor ama o iş yapmak nasıl bilmiyorum neden fonksiyonu anlayabiliyorum.
DÜZENLE
Tamam anladım! Ve hatta iki cevap var:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
ve
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
Ve bunun kitaplarını vurmak zamanı yüzden çok iyi özyinelemeye anlamıyorum görebilirsiniz arkaya bakmak! Herkes özyineleme üzerinde iyi kaynaklar var mı?
Başka bir soru, bu yüzden benim derim makeList()işlevi. Python aracılığıyla gittiğinde makeList()o vardığında, self.makeList(aNode.lChild, a)o hala bitiriyor ise yine işlevini çalıştırmaya başlamak gelmez makeList()işlevi ya da her şey duracak ve sadece bu yenilikler ile yeniden başlar aNode?
Ben mantıklı umuyoruz.













