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.

dfs method:

public class Solution {
    public boolean hasPathSum(TreeNode root, int sum) {
        if(root == null) return false; 
        return dfs(root, 0, sum);
    }
        
    private boolean dfs (TreeNode node, int accu, int sum) {
        accu += node.val;
        if(node.left == null && node.right == null && accu == sum)
            return true;
        else {
            if(node.left != null) {
                if(dfs(node.left, accu, sum))
                    return true;
            } 
                        
            if(node.right != null) {
                if(dfs(node.right, accu, sum))
                    return true;
            }
        }
        accu -= node.val;
        return false;
    }
}

  

another code:

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    /**
	 * This problem can be solved either by dfs or bfs.<br>
	 * @param root
	 * @param sum
	 * @return
	 */
    public boolean hasPathSum(TreeNode root, int sum) {
        boolean exists = false;
		if(root != null){
			Map<TreeNode, Integer> sumAtNode = new HashMap<TreeNode, Integer>();
			sumAtNode.put(root, root.val);
			Deque<TreeNode> nodes = new LinkedList<TreeNode>();
			nodes.add(root);
			while(nodes.peek()!= null){
				TreeNode aNode = nodes.poll();
				if(aNode.left == null && aNode.right == null){
					if(sumAtNode.get(aNode) == sum){
						exists = true;
						break;
					}
				}
				else{
					int pareValue = sumAtNode.get(aNode);
					if(aNode.left != null){
						sumAtNode.put(aNode.left, aNode.left.val + pareValue);
						nodes.add(aNode.left);
					}
					if(aNode.right != null){
						sumAtNode.put(aNode.right, aNode.right.val + pareValue);
						nodes.add(aNode.right);
					}
				}
			}
		}
		return exists;   
    }
}

  

posted @ 2014-06-07 03:44  Averill Zheng  阅读(153)  评论(0编辑  收藏  举报