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]
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]
]
如上例:
在hasPathSum递归返回时,记得要退一个元素,因为递归退栈时,只向上退一层!
代码如下:
public static ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root == null) return result;
ArrayList<Integer> temp = new ArrayList<Integer>();
hasPathSum(root, sum, result, temp) ;
return result;
}
public static void hasPathSum(TreeNode root, int sum, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> temp) {
if(root == null) return ;
temp.add(root.val);
if((root.left == null && root.right == null) && sum == root.val){
result.add(new ArrayList<Integer>(temp));
}else{
hasPathSum(root.left, sum-root.val, result, temp); // process left
hasPathSum(root.right, sum-root.val, result, temp); // process right
}
temp.remove(temp.size()-1); //Remove the element since call is returning one level up
}