问题
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 andsum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
return
[
[5,4,11,2],
[5,8,4,5]
]
java实现
建议结合path-sum和Palindrome Partitioning I,II这两个问题一起思考下,实现思路和写法都很类似。
import java.util.ArrayList;
public class Solution11 {
public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();//用来返回结果集合
ArrayList<Integer> list = new ArrayList<Integer>();
findPaths(root, sum, list, result);
return result;
}
private void findPaths(TreeNode root, int sum, ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result) {
if(root == null)
return;
list.add(root.val);
if(root.left == null && root.right == null && root.val == sum){
result.add(new ArrayList<Integer>(list));
}
findPaths(root.left, sum-root.val, list, result);
findPaths(root.right, sum-root.val, list, result);
list.remove(list.size()-1);
}
public static void main(String[] args) {
TreeNode root = new TreeNode(5);
TreeNode root1 = new TreeNode(4);
TreeNode root2 = new TreeNode(8);
root.left = root1;
root.right = root2;
TreeNode root3 = new TreeNode(11);
root1.left = root3;
TreeNode root4 = new TreeNode(13);
TreeNode root5 = new TreeNode(4);
root2.left = root4;
root2.right = root5;
TreeNode root6 = new TreeNode(7);
TreeNode root7 = new TreeNode(2);
root3.left = root6;
root3.right = root7;
TreeNode root8 = new TreeNode(5);
TreeNode root9 = new TreeNode(1);
root5.left = root8;
root5.right = root9;
ArrayList<ArrayList<Integer>> result = new Solution11().pathSum(root, 22);
System.out.println(result);
}
}