Leetcode 112. 路径总和

力扣(LeetCode) 112: 路径总和 - 解法思路 给定一个二叉树的根节点root和一个整数targetSum,如果树中存在根到叶子的路径,使得路径上所有节点值的和等于targetSum,则返回true。叶子是指没有子节点的节点。从目标总和中减去当前节点的值,然后递归检查任一子树是否有剩余总和的路径。当到达叶子时,检查其值是否等于剩余目标总和。递归解决方案通常因其简单性和与树结构的自然匹配而更受欢迎。 阅读详情

题目

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

说明: 叶子节点是指没有子节点的节点。

在这里插入图片描述
来自力扣:leetcode 112. 路径总和

解答

解法一:递归

按照前序遍历的顺序递归。

当到达叶子结点的时候,判断此时 sum 是否能被减成 0。

代码
/**
 * 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) {
        if(root == null) return false;
        if(root.left == null && root.right == null) return sum == root.val;
        return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
    }
}
结果

在这里插入图片描述

解法二:深度搜索+前序遍历

其实就是模拟前序遍历的非递归版。

使用 栈 数据结构,注意 先压右结点,后压左结点 即可。

代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

class Solution {
    
    class Pair {
        TreeNode node;
        int need;
        
        Pair(TreeNode node, int need) {
            this.node = node;
            this.need = need;
        }
    }
    
    public boolean hasPathSum(TreeNode root, int sum) {
        if(root == null) return false;
        
        LinkedList<Pair> stack = new LinkedList<>();         
        stack.push(new Pair(root, sum));
        while(!stack.isEmpty()) {
            Pair pair = stack.pop();
            TreeNode node = pair.node;
            int need = pair.need;
            
            if(node.left == null && node.right == null && need == node.val) {
                return true;
            }
            
            if(node.right != null) {
                stack.push(new Pair(node.right, need - node.val));
            }
            
            if(node.left != null) {
                stack.push(new Pair(node.left, need - node.val));
            }
        }
        
        return false;
    }
}
结果

在这里插入图片描述

【简单】力扣算法题解析LeetCode112:路径总和 题目要求判断二叉树中是否存在根节点到叶子节点的路径,使得路径上的节点值之和等于给定的目标值。使用深度优先搜索(DFS)递归遍历所有路径:若当前节点为空返回false;若是叶子节点则检查剩余目标值是否等于节点值;否则递归检查左右子树。时间复杂度O(N),空间复杂度O(H)。代码通过递归实现,优化了短路逻辑以减少冗余计算。示例分析验证了算法的正确性。 阅读详情

相关推荐

Leetcode 112: 路径总和

使用递归实现,树的递归逻辑清晰。判断叶子节点时,特别强调路径和条件。时间复杂度和空间复杂度分析简洁明了,边界处理完整。通过递归方法,你可以快速实现并解决问题,同时展示对二叉树递归的掌握,非常适合面试场景!

互联网架构师笔记 1005

leetcode 112 路径总和

leetcode 112 路径总和 题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 ...

EngineerHe的博客 751

美的集团-数据挖掘工程师面试分享

美的集团-数据挖掘工程师面试分享

510

力扣112. 路径总和(递归、迭代)

力扣112. 路径总和(递归、迭代) https://leetcode-cn.com/problems/path-sum/ 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明:叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 /...

小麦China的博客 276

无线通信技术及其在机器人中的应用

本文系统阐述了无线通信技术在机器人领域的应用框架与技术选型。首先构建了无线通信的三层理论架构:物理层解决信号传输问题,链路层处理接入控制,网络层实现组网管理。随后详细分析了主流无线技术的特性与适用场景:BLE适用于低功耗传感器节点,Wi-Fi适合高带宽视频传输,5G专网满足工业AGV的广域覆盖需求,星闪技术凭借20μs超低时延和4096台并发连接能力,为高端机器人应用提供突破性解决方案。通过鄂尔多斯隆基5G专网等典型案例,验证了5G在工业AGV规模化部署中的优势,并展望了通感算智融合、星闪+5G协同等未来发

weiyvyy的博客 1114

微信小程序 - 最新详细实现 “餐厅食堂外卖点餐“ 全屏左右联动菜单列表功能界面,附带搜索框、购物车功能、商品加减计算金额、折扣等,左侧商品分类,右侧列表数据,仿美团饿了么外卖点餐页面,饭店扫码点餐!

微信小程序,vue2,vue3,左右联动菜单,商品分类页面,点餐界面,美团外卖点餐,左右布局界面,饿了么点餐页面,左分类右列表,小程序实现左侧菜单,外卖点餐联动,锚点,点击左侧大类后侧列表跟着变跟着刷新,菜单左右联动效果,左菜单右边列表数据,uniapp,左侧菜单,右侧列表双向联动效果,右侧商品滑动时,右侧列表双向联动效果,侧边菜单和右边滚动条,电商项目,购物车,商品加减计算,外卖选餐页面带购物车计算,自动计算金额,微信小程序外卖点餐界面源码,店铺页面滑动左右联动,点餐类小程序界面,堂食,扫码点餐,餐饮行业

🏆 前端领域优质创作者 5158

LeetCode第112题_路径总和

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

qq_40263592的博客 1383

uniapp [安卓苹果App端] - 详细实现下载文件保存到用户手机本地,指定文件存储位置路径及文件夹名称下载并保存,Uniapp app端将文件下载保存并储存到指定目录(手机系统存储空间权限检测)

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,app端下载文件,移动端文件下载,并保存到手机本地存储空间,uniapp下载文件保存到手机本地,iOS下载文件怎么保存,系统读写存储空间权限,下载文件到本地详细流程及源代码,保存自定义目录,uniapp,实现下载文件并保存到本地,文件后缀,如何指定手机的存放目录路径url,点击下载文档到手机中并提示存储位置,如何在uniapp中实现文件下载功能,uniApp文件下载,怎么指定文件保存目录,下载报错,没反应

🏆 前端领域优质创作者 1万+

Leetcode112 路径总和 C++,Java,Python

Leetcode112 路径总和 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节...

Rp的博客 255

基于传感器数据实现火灾报警预测分析

火警 系统当检测到烟雾、火灾、一氧化碳或其他与火灾有关或一般通知的紧急情况时,向人们发出警告

DT程序员的博客 721

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 345

leetcode112-路径总和

不难发现这满足递归的性质,若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为。首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即可。假定从根节点到当前节点的值之和为。是指没有子节点的节点。

冲出仁川,走出马德里,故事还会再继续 536

基于Python的智能动漫更新监控爬虫系统:从原理到实战

本文详细介绍了如何使用Python构建一个智能化的动漫更新监控系统,涵盖从基础爬虫到高级自动化监控的全套解决方案。文章将深入探讨最新的网络爬虫技术,包括异步请求、反反爬策略、智能解析算法等,并提供完整的代码实现和性能优化方案。通过本系统,用户可以实时获取多个动漫平台的更新信息,并通过多种渠道接收通知。关键词:Python爬虫、动漫监控、自动化通知、异步爬虫、反反爬策略。

2201_76125261的博客 902

力扣第112题:路径总和

给定一个二叉树和一个目标和,判断该树中是否存在从根节点到叶子节点的路径,使得路径上的节点值之和等于给定的目标和。是指没有子节点的节点。

weixin_48941116的博客 784

27、物联网中的量子密钥分发:安全通信新范式

本文探讨了物联网(IoT)快速发展所带来的安全挑战,并提出量子密钥分发(QKD)作为应对新兴威胁的新范式。文章详细介绍了QKD的基础原理、BB84协议的实现流程以及其在物联网中的应用前景,同时强调了安全专业人员提升技能、制定标准化指南以及跨学科合作的重要性。通过利用量子力学特性,QKD能够提供更高的通信安全性,抵御量子计算等未来威胁,为物联网的安全发展提供保障。

tequila的博客 155

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 112. 路径总和 | Python

使用递归、广度优先搜索的思路,解决《112. 路径总和》问题

"大梦三千秋的博客 977

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

112. 路径总和 - 力扣(LeetCode)

依旧外部变量记录sum,当等于targetSum并且是叶子节点是就设置答案,前序位置放进入节点时加入该节点值,后序位置放离开该节点时减去该节点值。这里使用深度优先遍历更简单一些,广度的话要同时多个枝条的总值,最后再检查一遍,太麻烦了。树的遍历有两种:1. 深度优先遍历 2. 广度优先遍历。深度呢,就是一条遍历完,去另外一条,适合这种有关单个枝条的题目。属于遍历一遍可以得到答案的题,树的遍历一般都是通过递归来实现。

xxm919的博客 236

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode 力扣 112. 路径总和

题目描述(简单难度) 给定一个sum,判断是否有一条从根节点到叶子节点的路径,该路径上所有数字的和等于sum。 解法一 递归 这道题其实和 111 题 是一样的,大家可以先看 111 题 的分析,这道题无非是把 111 题 递归传递的depth改为了sum的传递。 如果不仔细分析题目,代码可能会写成下边的样子。 public boolean hasPathSum(TreeNode root, ...

wind_liang的博客 878

【LeetCode】[112] 路径总和

考察DFS /* * @lc app=leetcode.cn id=112 lang=java * * [112] 路径总和 * * https://leetcode-cn.com/problems/path-sum/description/ * * algorithms * Easy (44.17%) * Total Accepted: 13.9K * Total Su...

Watson的博客 327

LeetCode 112. 路径总和

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 112. 路径总和,做好准备了么,那么开始吧。 🌲🌲🐴🐴

weixin_62275996的博客 682

[LeetCode] 112.路径总和

LeetCode 112.路径总和 思路 递归 1、确定返回值与传入参数 参数: 1)二叉树的根节点 2)计数器,用于计算路径之和 返回值: 如果需要搜索整颗二叉树且不用处理递归返回值,递归函数就不要返回值。 如果需要搜索整颗二叉树且需要处理递归返回值,递归函数就需要返回值。 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(本题) 2、终止条件 让计数器初试为目标和,每次减去遍历路径节点上的数值,当计数器值为0,并且到了叶子结点(左右子节点都为NUL

夜来疯的博客 801

LeetCode112.路径总和

/** * LeetCode112.路径总和 * * 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 * * 说明: 叶子节点是指没有子节点的节点。 * * 示例: * 给定如下二叉树,以及目标和 sum = 22, * * 5 * / \ * 4 8 * / / \ * 11 1

u013134119的专栏 275

112.力扣LeetCode_路径总和

本文对比了两种递归方法判断二叉树路径和的方法。方法一通过累加节点值修改原树结构,在每个节点将其值累加到子节点值中;方法二则通过递减目标和,不修改原树结构。分析指出方法二更优,因其:1)保持原树结构不被破坏;2)具有更好的通用性和安全性,适用于多次查询和多线程场景。两种方法均采用前序遍历,递归终止条件为遇到空节点或叶子节点时判断当前值是否满足要求。文末提供了两种方法的完整注释代码实现。

2401_82472941的博客 374

力扣—112.路径总和

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

lllay_的博客 727
上一篇: Leetcode 111. 二叉树的最小深度
下一篇: Leetcode 113. 路径总和 II
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值