每日一道算法题028 路径总和

268 阅读1分钟

题目

leetCode 第 112 题,路径总和 关联类型:树

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
叶子节点 是指没有子节点的节点。

示例 1:

image

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true


示例 2

image

输入:root = [1,2,3], targetSum = 5
输出:false

示例 3:
输入:root = [1,2], targetSum = 0
输出:false

做题时间

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        
        
        
    }
}

以上给出方法输入参数,完成作答。

题目分析

  1. 询问是否存在从当前节点 root 到叶子节点的路径,满足其路径和为 targetSum
  2. 根节点为 null 为false
  3. 左右子树任意一条到叶子结点路径都可以

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行耗时: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);

    }
}