力扣112 路径总和

题目:

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

示例:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

思路:

递归,求和,遇到叶子节点比较sum和targetSum,相等则返回true。

 

复制代码
class Solution {
    int sum=0;
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root==null){
            return false;
        }
        sum+=root.val;
        return getPathSum(root,targetSum);
    }

    public boolean getPathSum(TreeNode root,int targetSum){
        if(root.left==null&&root.right==null){//叶子节点
            if(sum==targetSum){
                return true;
            }else{
                return false;
            }
        }
        if(root.left!=null){
            sum+=root.left.val;
            if(getPathSum(root.left,targetSum)) return true;
            sum-=root.left.val;//回溯
        }
        if(root.right!=null){
            sum+=root.right.val;
            if(getPathSum(root.right,targetSum)) return true;
            sum-=root.right.val;//回溯
        }
        return false;
    }
}
复制代码

也可以扣除,targetSum在遇见叶子节点时,能减至0,则返回true。

 

复制代码
class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root==null){
            return false;
        }
        return getPathSum(root,targetSum-root.val);
    }

    public boolean getPathSum(TreeNode root,int targetSum){
        if(root.left==null&&root.right==null){//叶子节点
            if(targetSum==0){//扣掉沿途节点值
                return true;
            }else{
                return false;
            }
        }
        if(root.left!=null){
            targetSum-=root.left.val;
            if(getPathSum(root.left,targetSum)==true){
                return true;
            }
            targetSum+=root.left.val;//回溯
        }
        if(root.right!=null){
            targetSum-=root.right.val;
            if(getPathSum(root.right,targetSum)==true){
                return true;
            }
            targetSum+=root.right.val;//回溯
        }
        return false;
    }
}
复制代码

 

 

 

 

 

posted @   壹索007  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示