原题链接:https://leetcode.com/problems/path-sum/
1. 题目介绍
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.
Note: A leaf is a node with no children.
给出一个二叉树和一个值sum,判断这个树是否有一条从根节点到叶子节点的路径,满足该路径的所有节点的值加起来等于sum。
叶子节点指的就是没有子树的节点。
Example:
Given the below binary tree and sum = 22,
给出下面这个棵树,还有sum = 22;
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
返回正确的值,因为这里有5->4->11->2的从根节点到叶子节点的路径使得路径节点的和为22。
2. 解题思路
可以使用递归的方法计算路径和。这个题和 404. Sum of Left Leaves有些类似。
都是使用递归的方法遍历每一个节点。同时也要注意需要设置参数now将当前累加的值传到下一层的子树。
实现代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
return helper(root, sum, 0);
}
public boolean helper(TreeNode root, int sum, int now) {
if(root == null){
return false;
}
now += root.val;
if(root.left == null && root.right == null && now == sum){
return true;
}
return helper(root.left,sum,now) || helper(root.right,sum,now);
}
}