मैं एक द्विआधारी खोज वृक्ष में सभी मदों की एक सूची बनाने की कोशिश कर रहा हूँ। मैं प्रत्यावर्तन को समझने, लेकिन मैं यह कैसे प्रत्येक मान और फिर एक सूची में संलग्न करने के लिए पता नहीं है। मैं एक समारोह कहा जाता है का निर्माण करना चाहते makeList()है कि मेरे पेड़ में सभी मदों की एक सूची वापस आ जाएगी। मेरे कार्यक्रमों में सभी कार्यों को छोड़कर काम makeList()समारोह और यह सुनिश्चित करें कि हर कोई कैसे मैं अपने पेड़ की स्थापना के बुनियादी ढांचे को समझता है शामिल किए गए हैं।
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)
मेरे को देखते हुए makeList()समारोह मैं क्यों यह काम नहीं करता लेकिन मैं यह काम करने के लिए पता नहीं कैसे देख सकते हैं।
संपादित करें
ठीक है मैंने समझ लिया! और मैं भी दो जवाब हैं जो मिल गया:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
तथा
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
और वापस देख मैं देख सकता हूँ कि मैं प्रत्यावर्तन समझ में नहीं आता बहुत अच्छी तरह से तो यह किताबें हिट करने के लिए समय है! किसी को भी प्रत्यावर्तन पर किसी भी अच्छे संसाधन हैं?
एक और सवाल है, तो कहते हैं कि मैं अपने फोन makeList()समारोह। जब अजगर के माध्यम से चला जाता है makeList(), जब यह करने के लिए हो जाता है self.makeList(aNode.lChild, a)यह समारोह को फिर से चलाने, जबकि यह अभी भी समाप्त हो रहा है शुरू करता है makeList()समारोह या सब कुछ रोक है और यह सिर्फ यह नई है से आरंभ aNode?
मुझे उम्मीद है कि इसका कोई अर्थ है।













