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] ]
Source
List<List<Integer>> path = new ArrayList<List<Integer>>();
List<Integer> s = new ArrayList<Integer>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if(root == null) return path;
int cur = root.val;
s.add(root.val);
DFS(root, cur, sum);
return path;
}
public void DFS(TreeNode root, int cur, int sum){
if(root.left == null && root.right == null){
if(sum == cur){
path.add(new ArrayList<Integer>(s)); //注意添加的方法,如果不加new ArrayList s变path也跟着变
}
return ;
}
if(root.left != null){
s.add(root.left.val);
DFS(root.left, cur + root.left.val, sum);
s.remove(s.size() - 1);
}
if(root.right != null){
s.add(root.right.val);
DFS(root.right, cur + root.right.val, sum);
s.remove(s.size() - 1); //.remove(要删除的元素的位置)
}
}
Test
public static void main(String[] args){
TreeNode a = new TreeNode(5);
a.left = new TreeNode(4);
a.right = new TreeNode(8);
a.left.left = new TreeNode(11);
a.left.left.left = new TreeNode(7);
a.left.left.right = new TreeNode(2);
a.right.left = new TreeNode(13);
a.right.right = new TreeNode(4);
a.right.right.left = new TreeNode(5);
a.right.right.right = new TreeNode(1);
System.out.println(new Solution().pathSum(a, 22));
}