[英]Python implement a preorder method of a binary tree
為什么這個 python 程序不能正常運行。 我想構建一個二叉樹,然后按順序遍歷它。 當我調用PreOrder
方法時,它什么也不返回。
class Node:
def __init__(self, data=None, left=None, right=None):
self.left = left
self.right = right
self.data = data
class BTree:
def __init__(self, root):
self.root = root
def CreateTree(self, root):
self.root.data = raw_input("Enter data,'*' means empty: ")
if self.root.data == '*':
return
self.root.left = Node()
self.root.right = Node()
self.CreateTree(self.root.left)
self.CreateTree(self.root.right)
def PreOrder(self, root):
if self.root != None:
if self.root.data != '*':
print self.root.data,
PreOrder(self, self.root.left)
PreOrder(self, self.root.right)
if __name__ == '__main__':
t = Node()
bt = BTree(t)
bt.CreateTree(t)
bt.PreOrder(t)
PreOrder
是 class BTree
的一種方法,您可能想要更改遞歸調用,如下所示:
def PreOrder(self):
if self.root != None:
if self.root.data != '*':
print self.root.data,
self.root.left.PreOrder()
self.root.right.PreOrder()
如果您只使用保存在__init__
中的self.root
,您也不需要將root
傳遞給CreateTree
我查看您的CreateTree
方法,您會看到,您從不使用root
,因此self.root.data
將始終為*
。 如果你解決了這個問題,你的代碼就會有更多的問題,都與self
和范圍有關。 你可能想檢查一下。
您的CreateTree
方法根本沒有提到參數root
。 此方法始終在self.root
上運行。
像這樣的東西可能會起作用:
def CreateTree(self, current_node):
current_node.data = raw_input("Enter data,'*' means empty: ")
if current_node.data == '*':
return
current_node.left = Node()
current_node.right = Node()
self.CreateTree(current_node.left)
self.CreateTree(current_node.right)
因為您在CreateTree
function 中設置self.root.data = '*'
通過這樣做self.root.data = raw_input("Enter data,'*' means empty: ")
。 最后,要終止輸入提示,您必須輸入'*'
。 所以你的self.root.data
最后一個值是'*'。
嘗試這個
print self.root.data
root.data = raw_input("Enter data,'*' means empty: ")
print self.root.data
if root.data == '*':
return
和這個
def CreateTree(self,root):
print self.root.data
root.data = raw_input("Enter data,'*' means empty: ")
print self.root.data
if root.data == '*':
return
self.root.left = Node()
self.root.right = Node()
self.CreateTree(self.root.left)
self.CreateTree(self.root.right)
def PreOrder(self, root):
print root
print self.root
print self.root.data
if self.root != None:
if self.root.data != '*':
print self.root.data,
PreOrder(self, self.root.left)
PreOrder(self, self.root.right)
else:
print 'what the hell'
if __name__ == '__main__':
t = Node(10,Node(),Node())
print t.data
bt = BTree(t)
bt.CreateTree(t)
bt.PreOrder(t)
知道哪里出錯了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.