参考了csdn中的代码https://blog.csdn.net/u010005281/article/details/79623396
注意把一个列表加到另一个列表中作为另一个列表的元素,一定要这样写list2.append(list1[:]),不然加的是空的,这涉及到Python的可变对象、不可变对象等机制
class Solution:
def __init__(self):
self.onePath = []
self.PathArray = []
def FindPath(self, root, expectNumber):
if root is None:
return self.PathArray
self.onePath.append(root.val)
expectNumber -= root.val
if expectNumber==0 and not root.left and not root.right:
self.PathArray.append(self.onePath[:])
elif expectNumber>0:
self.FindPath(root.left,expectNumber)
self.FindPath(root.right,expectNumber)
self.onePath.pop()
return self.PathArray# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# -*- coding:utf-8 -*-
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
if not root:
return []
ret = []
path = []
self.Find(root, expectNumber, ret, path)
# print ret
# a = [];self.f(a);print a
return ret
def Find(self, root, target, ret, path):
if not root:
return
path.append(root.val)
isleaf = (root.left is None and root.right is None)
if isleaf and target == root.val:
ret.append(path[:])
if root.left:
self.Find(root.left, target-root.val, ret, path)
if root.right:
self.Find(root.right, target-root.val, ret, path)
path.pop()
京公网安备 11010502036488号