[英]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.