题目
leetCode 第 112 题,路径总和 关联类型:树
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:false
示例 3:
输入:root = [1,2], targetSum = 0
输出:false
做题时间
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
}
}
以上给出方法输入参数,完成作答。
题目分析
- 询问是否存在从当前节点 root 到叶子节点的路径,满足其路径和为 targetSum
- 根节点为 null 为false
- 左右子树任意一条到叶子结点路径都可以
解答分析
本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:38.3 MB,击败了69.69% 的Java用户
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
return hasPathSum(root, targetSum, 0);
}
public boolean hasPathSum(TreeNode node, int target, int current) {
if (node == null) {//1.根节点则直接返回false 2.父节点为非叶子结点
return false;
}
current += node.val; //重新计算当前值
if (node.left == null && node.right == null) {//叶子结点
if (target == current) {
return true;
} else {
return false;
}
}
//递归调用,左右子树任意一个满足则为true
return hasPathSum(node.left, target, current) || hasPathSum(node.right, target, current);
}
}