leetcode -- Path Sum

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

For example:
Given the below binary tree and sum = 22,

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

 

 1 public boolean hasPathSum(TreeNode root, int sum) {
 2         // Note: The Solution object is instantiated only once and is reused by each test case.
 3         if(root == null){
 4             return false;
 5         }
 6         
 7         if(root.left == null && root.right == null && root.val == sum){
 8             return true;
 9         } else {
10             return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
11         }
12     }

 

 

 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 boolean hasPathSum(TreeNode root, int sum) {
12         // Start typing your Java solution below
13         // DO NOT write main() function
14         if(root == null){
15             return false;
16         }
17         ArrayList<ArrayList<Integer>> result = pathSum(root, sum);
18         if(result.size() != 0){
19             return true;
20         }
21         return false;
22     }
23     
24     public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
25         // Start typing your Java solution below
26         // DO NOT write main() function
27         ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
28         ArrayList<Integer> seqs = new ArrayList<Integer>();
29         int curSum = 0;
30         
31         generatePathSum(root, result, seqs, curSum, sum);
32         return result;
33     }
34     
35     public void generatePathSum(TreeNode root, ArrayList<ArrayList<Integer>> result,
36         ArrayList<Integer> seqs, int curSum, int expectedSum){
37             curSum += root.val;
38             seqs.add(root.val);
39             
40             boolean isLeaf = root.left == null && root.right == null;
41             if(curSum == expectedSum && isLeaf){
42                 ArrayList<Integer> tmp = new ArrayList<Integer>();
43                 tmp.addAll(seqs);
44                 result.add(tmp);
45             }
46             
47             if(root.left != null){
48                 generatePathSum(root.left, result, seqs, curSum, expectedSum);
49             }
50             
51             if(root.right != null){
52                 generatePathSum(root.right, result, seqs, curSum, expectedSum);
53             }
54             
55             seqs.remove(seqs.size() - 1);
56             
57         }
58 }

 

 1 public class Solution {
 2     public boolean hasPathSum(TreeNode root, int sum) {
 3         if(root == null){
 4             return false;
 5         }
 6         return checkPath(root, 0, sum);
 7     }
 8     
 9     public Boolean checkPath(TreeNode root, int curSum, int expectedSum) {
10         curSum += root.val;
11         boolean isLeaf = root.left == null && root.right == null;
12         
13         if(curSum == expectedSum && isLeaf){
14             return true;
15         }
16         boolean lResult = false;
17         if(root.left != null){
18             lResult = checkPath(root.left, curSum, expectedSum);
19         }
20         boolean rResult = false;
21         if(root.right != null){
22             rResult = checkPath(root.right, curSum, expectedSum);
23         }
24         
25         if(lResult || rResult){
26             return true;
27         }
28         
29         return false;
30     }
31 }

 

posted @ 2013-08-10 23:38  feiling  阅读(246)  评论(0编辑  收藏  举报