https://leetcode.com/problems/path-sum-ii/
Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum.
For example:
Given the below binary tree and sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
Code
# 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): """ :type root: TreeNode :type sum: int :rtype: List[List[int]] """ if root is None: return [] self.res = [] self._pathSum(root, sum, []) return self.res def _pathSum(self, root, sum, l): l += [root.val] if root.left is None and root.right is None: if sum==root.val: self.res += [l[:]] if root.left: self._pathSum(root.left, sum-root.val, l) if root.right: self._pathSum(root.right, sum-root.val, l) l.pop()
Idea
Use DSP to traverse every node in the tree. Pass the path from the root to the current node as a parameter in the traversal. Whenever it reaches a leaf, count if all nodes in the path sum to the target number. When a node finishes traversing its left node and right node, it should be popped out of the path.
Line 24: when you add current path (`l`) into `self.res`, you need to make a deep copy of `l`: `l[:]`