问题描述
地址:https://leetcode.com/problems/path-sum/#/description
描述:
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.
翻译:
给出一个二叉树和一个特定的值sum,判断是否有从 根节点到叶子节点的路径,使得所有路径上节点的和与sum相等。
问题解析
解这个题需要注意下面的问题:
(1)维持一个变量,可以记录到达当前节点时已经走过的所有节点上数字的和;
(2)一旦遇到 节点值的和=sum即可返回,不需要遍历完所有的节点;
(3)注意给出的条件是根节点到叶子节点的和。
解析代码I
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null){
return false;
}
if(root.val == sum && root.left== null && root.right == null){
return true;
}
return hasPathSum(root, 0, sum);
}
public boolean hasPathSum(TreeNode root, int count, int sum) {
if(root == null){
return false;
}
count += root.val;
if( count == sum && root.left == null && root.right == null){
return true;
}
if(root.left != null && hasPathSum(root.left,count, sum)){
return true;
}
if(root.right != null && hasPathSum(root.right,count, sum)){
return true;
}
return false;
}
解析代码II
public class PathSum{
int count = 0;
public boolean hasPathSumII(TreeNode root, int sum){
if(root == null){
return false;
}
count += root.val;
if(count == sum && root.left == null && root.right == null){
return true;
}
if(hasPathSumII(root.left, sum)){
return true;
}
if(hasPathSumII(root.right, sum)){
return true;
}
count -= root.val;
return false;
}
}