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] ]
Solution:
Use DFS to find the leaf of the tree.
If the sum of all nodes are the sum we want, we add this list to the result.
Code:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> result = new ArrayList<>(); if (root == null) { return result; } List<Integer> list = new ArrayList<>(); helper(root, sum, result, list); return result; } public void helper(TreeNode root, int target, List<List<Integer>> result, List<Integer> list) { if (root == null) { return; } list.add(root.val); if (root.left == null && root.right == null && root.val == target) { result.add(new ArrayList<Integer>(list)); } helper(root.left, target - root.val, result, list); helper(root.right, target - root.val, result, list); list.remove(list.size() - 1); } }