<p>检查您的功能:</p>
<pre><code>(...)
elif l[1] != None and l[2] == None:
bt.left = ll2nr(l[1])
elif l[2] != None and l[1] == None:
bt.right = ll2nr(l[2])
</code></pre>
<p>您可以很容易地看到添加<code>print (l[1], l[2])</code>来代替点,这两个条件都不满足。在</p>
^{pr2}$
<p>所以,第一个条件是true and false==>;false,第二个条件也是true and false==>;false。因此函数返回bt</p>
<p>如果你把它改成</p>
<pre><code>if l[1] != None: # You might simply write "if l[1]:" as well...
bt.left = ll2nr(l[1])
if l[2]: # ...like this
bt.right = ll2nr(l[2])
</code></pre>
<p>可能会更好。在</p>
<p>我把你的功能改成这样:</p>
<pre><code>def make_tree(l):
bt = BinaryTree(l[0])
#if (l[1] and l[2]) == None:
# return bt.getRootValue()
if l[1]:
bt.left = make_tree(l[1])
if l[2]:
bt.right = make_tree(l[2])
if not l[1] and not l[2]:
bt.left = "*"
bt.right = "*"
return bt
def printer(node, depth=0):
indent = '\t' * depth
if node:
if isinstance(node, basestring):
print ("{}{}={}".format(indent, node, depth))
else:
print ("{}{}={}".format(indent, node.key, depth))
printer(node.left, depth + 1)
printer(node.right, depth + 1)
else:
print ("{}*={}".format(indent, depth))
</code></pre>
<p>打印出来了:</p>
<pre><code>a=0
b=1
d=2
*=3
*=3
f=2
*=3
*=3
c=1
*=2
h=2
*=3
*=3
</code></pre>