leetcode------Path Sum II

标题: Path Sum II
通过率: 26.7%
难度: 中等

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]
]

与第一个版本一样,但是本次要求的是讲所以可能全部输出,那么就需要一个临时的list去保存,如果不等于则弹出最后一个。

具体代码:

 1 /**
 2  * Definition for binary tree
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
12         ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
13         ArrayList<Integer> tmp=new ArrayList<Integer>();
14         int sumtmp=0;
15         dfs(res,tmp,root,sum,sumtmp);
16         return res;
17     }
18     public void dfs(ArrayList<ArrayList<Integer>> res,ArrayList<Integer> tmp,TreeNode root, int sum,int sumtmp){
19         if(root==null) return;
20         sumtmp+=root.val;
21         tmp.add(root.val);
22         if(root.left==null&&root.right==null&&sumtmp==sum){
23             res.add(new ArrayList<Integer>(tmp));
24         }
25         if(root.left!=null) dfs(res,tmp,root.left,sum,sumtmp);
26         if(root.right!=null)dfs(res,tmp,root.right,sum,sumtmp);
27         sumtmp-=root.val;
28         tmp.remove(tmp.size()-1);
29     }
30 }

 

posted @ 2015-03-19 16:26  pku_smile  阅读(138)  评论(0编辑  收藏  举报