我正在尝试编写一个代码来打印二叉树中的路径,该路径加起来传递给函数。对于一个简单的测试用例,下面的代码仍然没有成功:
上次执行的输入:Binary Tree = [1], sum = 1
运行时错误消息:
Line 26: TypeError: object of type 'NoneType' has no len()
标准输出:None None
我无法理解leftPath
和rightPath
如何成为None
。我根本没回来。
'''
Created on Aug 12, 2015
@author: debpriyas
'''
class BTNode(object):
'''
classdocs
'''
def __init__(self,value, leftBTNode=None, rightBTNode=None):
'''
Constructor
'''
self.value = value
self.left = leftBTNode
self.right = rightBTNode
# To deal with duplicate values in BST.
self.count = 1
def pathSum(root, sum):
return pathSumHelper( root, sum, [])
def pathSumHelper(root, sum, path):
if root == None:
if sum == 0:
return path
else:
return []
leftPath = pathSumHelper(root.left, sum-root.value, path.append(root.value))
rightPath = pathSumHelper(root.right, sum-root.value, path.append(root.value))
print leftPath, rightPath
if len(leftPath) == 0 and len(rightPath) == 0:
return []
if len(leftPath) == 0:
return [rightPath]
elif len(rightPath) == 0:
return [leftPath]
return [leftPath, rightPath]
if __name__ == '__main__':
root = BTNode(1)
print pathSum(root, 1)
答案 0 :(得分:1)
问题在于:
leftPath = pathSumHelper(root.left, sum-root.value, path.append(root.value))
rightPath = pathSumHelper(root.right, sum-root.value, path.append(root.value))
您正在使用path.append(root.value),然后使用"追加"函数调用作为pathSumHelper函数中的一个参数,它是一个NoneType(它就地修改了对象,并返回None,这就是为什么当你从控制台调用它时,它什么也不返回)。
相反,您需要在函数调用之前使用append,然后在函数中使用path或执行
path + [root.value]
在你的函数调用中,它将返回一个实际的列表。
我建议您执行以下操作,因为您要修改" path"原地我在假设。
path.append(root.value)
leftPath = pathSumHelper(root.left, sum-root.value, path)
任何总和为0的东西,它将返回一个Nonetype,这将在len调用期间导致TypeError。
一个简单,可验证,可重复的例子是:
>>>def a(x):
... print(x)
>>>mylist = list(range(10))
>>> a(mylist.append(1))
None
>>> a(mylist + [5])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 5]