Path Sum问题

Fri Oct 09 17:29:22 CST 2015 796 算法

文章摘要二叉树的路径和问题。给定一个二叉树和一个整数,求此二叉树是否存在一条从根到叶子结点的路径,其路径上每个结点的值的和等于这个给定的整数。

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.(question from LeetCode)

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.

来自LeetCode的PathSum问题。题目给定一个二叉树和一个整数,问此二叉树是否存在这样一条从根到叶子结点的路径:路径上每个结点的值的和等于这个给定的整数。

思路:采用二叉树的深度优先-先序遍历策略,使用一个currentSum变量来记录走到当前某一步时路径上各个结点的和,开始时为0;每走到一个结点,currentSum加上当前结点的值;若当前结点为叶子结点(即node.left==null&&node.right==null)时,判断一下currentSum与题目输入的sum是否相等,相等则返回true,不相等则返回false.

方法签名:travel(TreeNode root, int sum, int currentSum)

递归调用:return travel(root.left, sum, currentSum) || travel(root.right, sum, currentSum);


详细代码如下(Java实现):

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean hasPathSum(TreeNode root, int sum) {
        return travel(root, sum, 0);
    }
    
    public boolean travel(TreeNode root, int sum, int currentSum){
        if(root != null){
            //visit(root)
            currentSum += root.val;
            if(root.left==null && root.right==null){
                if(currentSum == sum){
                    return true;
                }
                return false;
            }
            return travel(root.left, sum, currentSum) || travel(root.right, sum, currentSum);
        }
        return false;
    }
}

262ms


打赏
打赏

分享到: