解题思路:

这里需要传入一个全局量来记录数据。

就好比学校评比卫生标兵寝室~于是乎宿管大妈带着个计分的表格开始检查卫生,从一楼记到四楼,每层都记录数据。

从无到有,越积越多。分数过低的,不符合条件的直接从计分表里划出去,不再考虑。

 1 public List<List<Integer>> pathSumII(TreeNode root, int sum) {
 2     List<List<Integer>> res = new ArrayList<>();
 3     List<Integer> subRes = new ArrayList<>();
 4     if (root == null) {
 5         return res;
 6     }
 7     helper(root, subRes, res, sum);
 8     return res;
 9 }
10 
11 private void helper(TreeNode root, List<Integer> subRes, List<List<Integer>> res, int sum) {
12     if (root == null) {
13         return;
14     }
15     if (root.left == null && root.right == null) {
16         if (root.val == sum) {
17             subRes.add(root.val);
18         res.add(new ArrayList<Integer>(subRes));
19         subRes.remove(subRes.size() - 1);
20         }
21         return;
22 }
23 
24 subRes.add(root.val);
25 helper(root.left, subRes, res, sum - root.val);
26 helper(root.right, subRes, res, sum - root.val);
27     //Remove的是把当前层的root从subRes中删除
28     subRes.remove(subRes.size() - 1);
29 }

这里,subRes是记录从老祖宗root到当前层的节点node走过的路径, res是全局用来存储结果的变量。

 

posted on 2018-02-28 13:51  mayinmiao  阅读(84)  评论(0编辑  收藏  举报