34. 二叉树中和为某一值的路径
二叉树中和为某一值的路径
http://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca
参考了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()