我有一个简单的程序,从一个排序数组创建一个BST。它应该解析树而不显示本质上没有的叶子。有人能帮我解释一下为什么这个程序仍然会说“没有”。我是一个Python呆子,希望你能帮我。我已经试过了!='None'与is None一起,但得到相同的结果。在
class Node:
def __init__(self,value):
self.value=value
self.nodeleft=None
self.noderight=None
def makeBST(ia,start,end,tree):
if (end < start):
return None
mid = (start + end) / 2
n = Node(ia[mid])
n.nodeleft = makeBST(ia, start, mid-1, tree)
n.noderight = makeBST(ia, mid+1, end, tree)
tree.append(n)
return n
def printBST(root):
print 'RR' ,root.value
if root.nodeleft == None:
print 'EOT'
else:
print printBST(root.nodeleft)
if root.noderight == None:
print 'EOT'
else:
print printBST(root.noderight)
if __name__ == '__main__':
array = [1, 2, 3, 4, 5, 6]
dic = []
root = makeBST(array, 0, len(array)-1, dic)
printBST(root)
printBST
应该return
这些值,而不是print
它们。因为它不返回任何内容,所以它默认为None
。这就是为什么printBST(root) is None
printBST(root)
本身不会打印值。您必须在前面加一个print
:对于PEP 8,永远不要将非类型单例与相等运算符(例如
==
和!=
)进行比较。使用is None
和/或is not None
问题是您的代码将
printBST
的返回值传递给print
。由于printBST
不返回任何内容,None
被打印。在所以当你写道:
该代码肯定会打印}。在
None
,因为printBST
不包含返回语句,因此默认返回{您需要更改
^{pr2}$printBST
才能执行此操作:还要注意,使用
is
是测试None
的正确方法。在也就是说,您可以这样简化代码:
除了更简单之外,此代码还有一个额外的好处,即当呈现空树时不会失败。在
相关问题 更多 >
编程相关推荐