Path Sum II — DFS Backtracking All Paths

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 365 · Path Sum II

Difficulty: Medium · Pattern: DFS Backtracking

Find all root-to-leaf paths where sum equals target.

Solutions

# Python
def pathSum(root, targetSum):
    res = []
    def dfs(node, remaining, path):
        if not node: return
        path.append(node.val)
        if not node.left and not node.right and remaining == node.val:
            res.append(path[:])
        else:
            dfs(node.left, remaining-node.val, path)
            dfs(node.right, remaining-node.val, path)
        path.pop()
    dfs(root, targetSum, [])
    return res
// Java
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int target) {
    dfs(root, target, new ArrayList<>());
    return res;
}
void dfs(TreeNode node, int rem, List<Integer> path) {
    if (node==null) return;
    path.add(node.val);
    if (node.left==null&&node.right==null&&rem==node.val) res.add(new ArrayList<>(path));
    else { dfs(node.left,rem-node.val,path); dfs(node.right,rem-node.val,path); }
    path.remove(path.size()-1);
}

Complexity

  • Time: O(n^2) worst case (copy path at each leaf)
  • Space: O(n*h)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro