113. 路径总和 II

113. 路径总和 II_第1张图片

思路:
运用递归,首先要判断递归结束的条件。
1. 限制条件是从根到叶子结点!
if not node:
	return
	# 只要没达到叶子结点,就一路存储结点
	tmp.append(node.val)      
2. 找到需要的道路(判决条件):
 # 需要的道路(判决条件):到达叶子结点且道路总和为s
if not node.left and not node.right and sum(tmp) == s:  
    res.append(tmp[:])
# 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, s):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: List[List[int]]
        """
        res = []
        def dfs(node, tmp):    # tmp存储道路上的结点
            if not node:
                return
            # 只要没达到叶子结点,就一路存储结点
            tmp.append(node.val)      
            # 需要的道路(判决条件):到达叶子结点且道路总和为s
            if not node.left and not node.right and sum(tmp) == s:  
                res.append(tmp[:])
            dfs(node.left, tmp)
            dfs(node.right, tmp)
            tmp.pop()
        dfs(root, [])
        return res

你可能感兴趣的:(Leetcode)