题意为找出根到树叶节点路径上的值和为指定值的路径集合。主要解决思路是前序遍历,定义一个结果集合以及一个记录路径的List, 当List上的值的和为指定值时,将List加入到结果集当中。
代码如下:
1 /**
2 * Definition for a binary tree node.
3 * public class TreeNode {
4 * int val;
5 * TreeNode left;
6 * TreeNode right;
7 * TreeNode(int x) { val = x; }
8 * }
9 */
10 class Solution {
11 public List<List<Integer>> pathSum(TreeNode root, int sum) {
12 List<List<Integer>> res = new ArrayList<List<Integer>>();
13 List<Integer> item = new ArrayList<Integer>();
14
15 helper(root, res, item, 0, sum);
16
17 return res;
18 }
19
20 private void helper(TreeNode root, List<List<Integer>> res, List<Integer> item, int tmpsum, int sum){
21 if(root == null){
22 return;
23 }
24
25 tmpsum += root.val;
26 item.add(root.val);
27 if(root.left == null && root.right == null && tmpsum == sum){
28 res.add(new ArrayList<Integer>(item));
29 }
30
31 helper(root.left , res, item, tmpsum, sum);
32 helper(root.right, res, item, tmpsum, sum);
33
34 item.remove(item.size()-1);
35 }
36 }
END