擅长:python、mysql、java
<p>您正在将<code>None</code>传递给您的函数,该函数由以下项定义:</p>
<pre><code>if root == None:
pass
</code></pre>
<p>这就是为什么什么都没印出来。</p>
<p>另外,这只是个人观点,我实际上会让PreOrder只接受self参数,然后从那里做PreOrder,使递归定义变得非常简单。</p>
<p>基本上是这样的:</p>
<pre><code> def PreOrder(self):
print self.data
if self.left:
print self.left.PreOrder()
if self.right:
print self.right.PreOrder()
</code></pre>
<p>但这是一个优先考虑的问题,你的解决方案很好。</p>
<p>作为明目张胆的宣传,我最近写了一篇关于用Python编写基本二进制树的文章,如果你想查看一下,可以在这里找到:</p>
<p><a href="http://intothewebs.tumblr.com/post/40256328302/embrace-the-basics-binary-tree" rel="nofollow noreferrer">http://intothewebs.tumblr.com/post/40256328302/embrace-the-basics-binary-tree</a></p>
<p>更新:</p>
<p>好吧,在你评论之后,我理解你的怀疑。</p>
<p>传递到方法中的根参数实际上没有更改,因为Python中的参数是按值传递的:</p>
<p><a href="https://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference">How do I pass a variable by reference?</a></p>
<p>读一下这个问题的公认答案,它太棒了,应该解释一下我的意思。</p>
<p>你们中有:</p>
<pre><code>root = None
a = a.insert(root,4)
a.insert...
</code></pre>
<p>等等,你的代码应该可以工作。</p>