这是我在Python中实现二叉树的代码片段。这在我运行PreOrder函数时有效。
class Node:
def __init__(self,data):
self.left = None
self.right = None
self.data = data
class BinaryTree(Node):
def __init__(self):
self.root = None
def addNode(self,data):
return Node(data)
def insert(self,root,data):
if(root == None):
root = self.addNode(data)
else:
if(data <= root.data):
root.left = self.insert(root.left,data)
else:
root.right = self.insert(root.right,data)
return root
def PreOrder(self,root):
if root == None:
pass
else:
print(root.data)
self.PreOrder(root.left)
self.PreOrder(root.right)
a = BinaryTree()
root = a.addNode(2)
#root = None
a.insert(root,4)
a.insert(root,34)
a.insert(root,45)
a.insert(root,46)
a.insert(root,41)
a.insert(root,48)
a.PreOrder(root)
但是将第2和第3行的main更改为
#root = a.addNode(2)
root = None
什么都没印。我觉得我错过了一些基本的东西。如有任何澄清,将不胜感激。
你有
root = None
,然后在PreOrder
你的第一行是if root == None: pass
,所以它不会为你做任何事情。您正在将
None
传递给您的函数,该函数由以下项定义:这就是为什么什么都没印出来。
另外,这只是个人观点,我实际上会让PreOrder只接受self参数,然后从那里做PreOrder,使递归定义变得非常简单。
基本上是这样的:
但这是一个优先考虑的问题,你的解决方案很好。
作为明目张胆的宣传,我最近写了一篇关于用Python编写基本二进制树的文章,如果你想查看一下,可以在这里找到:
http://intothewebs.tumblr.com/post/40256328302/embrace-the-basics-binary-tree
更新:
好吧,在你评论之后,我理解你的怀疑。
传递到方法中的根参数实际上没有更改,因为Python中的参数是按值传递的:
How do I pass a variable by reference?
读一下这个问题的公认答案,它太棒了,应该解释一下我的意思。
你们中有:
等等,你的代码应该可以工作。
相关问题 更多 >
编程相关推荐