这里有两个问题,其中有照顾,一旦他们已经从average
计算返回值做。
首先,在您的代码中,唯一的return
语句将返回非数字None
值。这是一个问题,因为当你得到没有两个子节点的节点时(例如一个叶节点),tree['left']
或/和tree['right']
将返回None
。此None
传递给average
,返回None
。你得到的错误是由于后续尝试在函数的第三行添加这个返回的值。为了解决这个问题,你可以简单地返回一个“基本情况”值,以表示空的树的“平均值”应该是多少。
其次,即使在average
递归调用不是None
子节点上的情况下,average
将仍然返回None
因为没有在功能上没有其他return语句,并在Python当评估到达没有返回语句的函数的结尾有一个隐含的返回None
。要解决这个问题,只需返回你计算的total
!
修复这两个问题看起来可能像下面这样:
def average(tree):
if tree is None:
return 0
total = tree['data'] + average(tree['left']) + average(tree['right'])
return total
虽然我不能肯定地说,在基本情况下返回零是最适合正是你所要完成的任务。
作为最后一点,您可能希望添加tree['data']
不是None
的检查来排除节点没有数据的边缘情况!
裸'返回'返回'无',所以你的支票基本上是无用的。也许返回一个默认的_integer_值,比如“0”。另外,它应该是'如果树是None:'用'is'而不是'=='。 –
你还需要'返回total'。另外,建议你不要使用'sum'作为你的函数名,它隐藏了python的内置'sum'。 – AChampion
@Christian Dean为什么不是'=='甚至是'不是'? –