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] ]dfs,use path to record the current node all the way down, after visiting the left and right child, remove current node from path
public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum){
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> path = new ArrayList<Integer>();
pathHelper(root, sum, path, list);
return list;
}
public void pathHelper(TreeNode root, int sum, ArrayList<Integer> path, ArrayList<ArrayList<Integer>> list){
if(root==null)
return;
path.add(root.val);
if(root.left==null && root.right==null && root.val==sum){
ArrayList<Integer> newPath = new ArrayList<Integer>(path);
list.add(newPath);
}
else{
pathHelper(root.left, sum-root.val, path, list);
pathHelper(root.right, sum-root.val, path, list);
}
path.remove(path.size()-1);
}