我在测试以下函数时出错。有人能帮我吗
代码:
class treenode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def largest_leaf_value(tnode):
if tnode is None:
return None
res = tnode.data
lres = largest_leaf_value(tnode.left)
rres = largest_leaf_value(tnode.right)
if lres > res:
res = lres
if rres > res:
res = rres
return res
以下是测试脚本:
# test tree with 1 level i.e. root value only
input_tree = T.treenode(1)
expected = 3
result = a8q1.largest_leaf_value(input_tree)
assert result is expected, "{}: copying empty tree returned unexpected result".format(test_item)
# test a longer tree
input_tree = T.treenode(1, T.treenode(2, T.treenode(3, T.treenode(4, T.treenode(5)))))
expected = 5
result = a8q1.largest_leaf_value(input_tree)
assert result is expected, "{}: copying empty tree returned unexpected result".format(test_item)
下面是我得到的错误:
Traceback (most recent call last):
File "D:/CMPT 145/Assignment 8/a8q1_testing.py", line 60, in <module>
result = a8q1.largest_leaf_value(input_tree)
File "D:\CMPT 145\Assignment 8\a8q1.py", line 44, in largest_leaf_value
if lres > res:
TypeError: '>' not supported between instances of 'NoneType' and 'int'
请告诉我为什么会这样
由于您的
largest_leaf_value
将在其递归基本情况下返回None
,因此您需要准备好让lres
或rres
获得分配给它们的None
类型错误发生在将
lres
或rres
与res
进行比较的行上,它告诉您None
值不能与res
进行比较因此有两种可能:要么避免在
lres
或rres
为None
时执行比较,要么不要让函数返回None
,而是返回-infinity(因为该值小于所有其他有限数值)第一种方法的解决方案:
第二种方法的解决方案:
请注意,当您在初始调用中将空树(即
None
)作为参数传递时,其行为将有所不同。从数学上讲,它没有定义空集合中的最大值,因此它将取决于您在这种情况下的预期结果最后,您可以使用
max()
使第二个版本稍微短一点:相关问题 更多 >
编程相关推荐