题目要求
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。返回符合要求的路径
说明: 叶子节点是指没有子节点的节点。
解题思路
有了上一道题的基础 解答 leetcode 112. Path Sum
我们可以采用这个思想去判断是不是有这条路径,然后难点是如何记住这条路径,我们采用一个数组的方式,每次查找到一个节点,就把当前节点放在数组中,然后对应的将目标搜索值减去当前节点。这样的去递归,当到一个叶子节点时,我们可以判断节点值是不是和当前的搜索值一样,一致的话,我们就算找到一条路径,把他存放在结果的list中即可。
主要代码python
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def pathSum(self, root, sum):
res = []
if root:
self.dfs(root,sum,[], res)
return res
# path 记录每一种可能的结果,res最后的结果
def dfs(self, node, sum, path, res):
if not node.left and not node.right and node.val == sum: #
path.append(node.val)
res.append(path)
if node.left:
self.dfs(node.left, sum-node.val, path+[node.val],res) #记录每次的路径
if node.right:
self.dfs(node.right, sum-node.val, path+[node.val], res)