首页 > 编程语言 >力扣(Leetcode)112. 路径总和(JAVA)

力扣(Leetcode)112. 路径总和(JAVA)

时间:2024-11-09 18:49:58浏览次数:6  
标签:paths right JAVA int 力扣 targetSum 112 TreeNode root

一、目标

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

叶子节点 是指没有子节点的节点。

二、代码解读

总体代码:
 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //初始化判断标志位成员变量
    private boolean judge = false;
    public boolean hasPathSum(TreeNode root, int targetSum) {
        ArrayList<Integer> paths = new ArrayList<>();
        //防止直接传入空节点
        if(root == null){
            return false;
        }
        getpaths(paths, root, targetSum);
        //返回标志位
        return judge;
    }
    public void getpaths(ArrayList<Integer> paths, TreeNode root, int targetSum){
        //getpaths方法由二叉树所有路径题目代码改编而成,详细主页,只解释修改部分
        paths.add(root.val);
        if(root.left == null && root.right == null){
            /*每次判断到一个叶子节点代表着记录完一条路径,
            求出该条路经的和,判断是否与targetSum相同,
            如果相同更细标志位为true
            */
            int sum = 0;
            for(int i : paths){
                sum += i;
            }
            if(sum == targetSum){
                judge = true;
            }
        }
        if(root.left != null){
            getpaths(paths, root.left, targetSum);
            paths.remove(paths.size() - 1);
        }
        if(root.right != null){
            getpaths(paths, root.right, targetSum);
            paths.remove(paths.size() - 1);
        }
    }
}

  主要流程为初始化标志位false,空节点传入判断,记录二叉树所有路径的同时只进行路径临时储存,每次找到一条路径求一次和判断一次是否要更新标志位为true

        public void getpaths(ArrayList<Integer> paths, TreeNode root, int targetSum){
        //getpaths方法由二叉树所有路径题目代码改编而成,详细主页,只解释修改部分
        paths.add(root.val);
        if(root.left == null && root.right == null){
            /*每次判断到一个叶子节点代表着记录完一条路径,
            求出该条路经的和,判断是否与targetSum相同,
            如果相同更细标志位为true
            */
            int sum = 0;
            for(int i : paths){
                sum += i;
            }
            if(sum == targetSum){
                judge = true;
            }
        }
        if(root.left != null){
            getpaths(paths, root.left, targetSum);
            paths.remove(paths.size() - 1);
        }
        if(root.right != null){
            getpaths(paths, root.right, targetSum);
            paths.remove(paths.size() - 1);
        }
    }

三、总结

  本题解法基于二叉树所有路径的解法上修改而成,可以视作是一道题一起进行记忆。

标签:paths,right,JAVA,int,力扣,targetSum,112,TreeNode,root
From: https://blog.csdn.net/zzb1580/article/details/143634931

相关文章

  • 257. 力扣(LeetCode)二叉树的所有路径(JAVA)
    一、目标给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。二、代码解读总代码:/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*......
  • Java毕业设计-基于SSM的新生报到系统【代码+论文+PPT+开题】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能个人中心:提供学生个人信息查看与编辑,以及报到进度......
  • java毕业设计-基于SSM的购物商城系统【代码+论文+PPT+开题+任务书】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能个人中心:管理用户个人信息,包括资料编辑、密码修改......
  • java毕业设计-基于ssm的汽车配件销售业绩管理系统【代码+论文+PPT+任务书+开题报告】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能个人中心:管理用户个人信息,包括账户设置、资料编辑......
  • JAVA自动化扫描并使用Driver进行小型DDOS-----JAVA
    packagecom.alatus.searchinfo.config;importcom.alatus.searchinfo.Entity.AccountEntity;importcom.alatus.searchinfo.utils.HttpUtils;importcom.alibaba.excel.context.AnalysisContext;importcom.alibaba.excel.metadata.CellExtra;importcom.alibaba.excel......
  • PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
    相信每一个计算机科班出身的同学或许都有这样的经历:在大三的某一天,仿佛打通了全身筋脉一般把三年的所学:“数电里的与非门——[计算机体系结构]——汇编语言——C语言——C++语言——Java语言”。所有知识全部串联了起来。所有这些语言的出现都仿佛都有了必然性和追根溯源的历史......
  • 题解:P11248 [GESP202409 七级] 矩阵移动
    笑点解析:这个人所在城市考试当天刮台风了,没考,免费送了一次12月的考试。设计这么一个东西:\(dp_{i,j}\)表示到格子\((i,j)\)的最大分数。本来还好,但现在的问题是,如果这个格子是‘?’,我哪儿知道到底可不可以变啊?万一变得太多了,那,那不就废了!万一少了,那我分不就没了?所以我们......
  • 全新版Java面试八股文合集(495道)
     过滤器和拦截器区别(这个问题基础,没想到问的频率挺高,还容易回答不好)他们都可以在请求的过程中插入一手,他们的请求过程如下:当一个请求过来时,会交给web服务器提供的过滤器,再来到servert。有一个叫DispatchServert的servert,在它里面就会调用我们的拦截器,再由我们的DispatchSer......
  • 11.9 javaweb学习 day2 基础标签&样式
    网页响应流程浏览器前端服务器后端服务器数据库1.浏览器请求前端2.前端响应浏览器3.浏览器请求后端4.后端请求数据库5.数据库响应后端6.后端响应浏览器网页的组成1.网页的文字,图片,音频,视频,超链接什么的,本质是前端代码2.前端代码通过浏览器的转化......
  • 解决java.lang.NoSuchMethodError错误
    背景跑项目的时候遇到java.lang.NoSuchMethodError错误 问题分析`NoSuchMethodError`错误通常是由于类路径问题导致的代码可能依赖了不同版本的库,导致版本之间不兼容可能是`Maven`依赖管理出现问题,导致无法解析依赖库解决方案1.检查版本依赖确认代码中引用的库......