这是我在
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行
#root = a.addNode(2) root = None
不打印任何东西.我觉得我错过了一些基本的东西.任何澄清将不胜感激.
解决方法
您将None传递给您定义的函数:
if root == None: pass
这就是没有印刷品的原因.
另外,这只是个人观点,我实际上会让PreOrder只接受self参数,并从那里执行PreOrder,这使得递归定义变得非常简单.
基本上是这样的:
def PreOrder(self): print self.data if self.left: print self.left.PreOrder() if self.right: print self.right.PreOrder()
但这是一个偏好的问题,你的解决方案工作得很好.
作为公然宣传,我实际上写了一篇关于在Python中编写基本BinaryTree的帖子,如果你想查看它,可以在这里找到:
http://intothewebs.tumblr.com/post/40256328302/embrace-the-basics-binary-tree
更新:
好的,你发表评论后,我理解你的疑问.
传递给方法的根参数并没有真正改变,因为Python中的params是通过值传递的:
How do I pass a variable by reference?
阅读这个问题中接受的答案,它很棒,应该解释我的意思.
你有:
root = None a = a.insert(root,4) a.insert...
等等,你的代码应该工作.