news 2026/3/6 22:47:22

力扣刷题:路径总和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣刷题:路径总和

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

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

示例 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
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。
示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

解析:
这道题使用dfs+回溯来解决:

使用深度优先搜索遍历所有可能的路径,在遍历过程中:
从根节点开始,记录当前路径的累加和
到达叶子节点时,检查路径和是否等于目标值
找到一条符合条件的路径就立即返回

如何表示路径和?
从目标值开始,每经过一个节点就减去其值,检查是否减到0

递归终止条件是什么?
到达叶子节点时,判断剩余值是否为0
如果当前节点为空,返回false

如何遍历所有路径?
对每个非叶子节点,分别探索其左子树和右子树
使用递归进行深度优先搜索
具体代码:

/** * @param {TreeNode} root * @param {number} targetSum * @return {boolean} */varhasPathSum=function(root,targetSum){// 1. 处理空树的情况:空树没有路径,直接返回falseif(!root)returnfalse// 2. 从根节点开始遍历,初始sum = targetSum - 根节点值// 因为根节点的值已经计入路径和了returntraversal(root,targetSum-root.val)};functiontraversal(node,sum){// 3. 终止条件1:到达叶子节点,且剩余sum为0// sum === 0 表示路径和正好等于targetSum// !node.left && !node.right 确保是叶子节点if(sum===0&&!node.left&&!node.right)returntrue// 4. 终止条件2:到达叶子节点,但剩余sum不为0// 说明这条路径的和不等于targetSumif(sum!==0&&!node.left&&!node.right)returnfalse// 5. 递归处理左子树if(node.left){// 5.1 做出选择:将左子节点的值从sum中减去sum-=node.left.val// 5.2 递归探索左子树if(traversal(node.left,sum)){returntrue// 如果左子树找到符合条件的路径,直接返回true}// 5.3 撤销选择(回溯):恢复sum的值// 因为要尝试右子树,需要回到之前的状态sum+=node.left.val}// 6. 递归处理右子树if(node.right){// 6.1 做出选择:将右子节点的值从sum中减去sum-=node.right.val// 6.2 递归探索右子树if(traversal(node.right,sum)){returntrue// 如果右子树找到符合条件的路径,直接返回true}// 6.3 撤销选择(回溯):恢复sum的值sum+=node.right.val}// 7. 左右子树都没有找到符合条件的路径,返回falsereturnfalse}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 18:53:50

Win10下TensorFlow-GPU安装全指南

Win10下TensorFlow-GPU安装全指南 在深度学习项目中,本地训练环境的搭建往往是第一步,也是最容易“卡住”的一步。尤其是当你满怀期待地打开代码编辑器,准备跑通第一个神经网络模型时,却被告知“No GPU detected”——那种挫败感…

作者头像 李华
网站建设 2026/2/25 17:44:58

基于NPort5630的Modbus串口通信优化方案

基于NPort5630的Modbus串口通信优化方案:打通工业传感与大模型推理的数据通路 在智能制造、智慧能源和边缘AI快速落地的今天,一个常被忽视的问题浮出水面:再强大的大模型,也怕“瞎输入”。尤其是在需要融合物理世界数据进行决策的…

作者头像 李华
网站建设 2026/3/3 9:07:24

Open-AutoGLM到底有多强?:深度剖析下一代AI代理的自主决策机制

第一章:Open-AutoGLM:大模型自主智能体的发 Open-AutoGLM 是一个面向大语言模型(LLM)的开源框架,旨在实现模型驱动的自主智能体系统。该框架通过引入任务规划、环境感知与动态反馈机制,使大模型能够独立完成复杂任务链…

作者头像 李华
网站建设 2026/3/5 20:52:45

PyTorch多GPU训练全指南:单机到多机并行实战

PyTorch多GPU训练全指南:从单机到多机并行实战在深度学习模型日益庞大的今天,单张GPU早已无法满足高效训练的需求。一个拥有40亿参数的Transformer模型,在单卡V100上跑一次完整训练可能需要数周时间;而通过合理的多GPU并行策略&am…

作者头像 李华
网站建设 2026/3/3 19:04:15

2026大模型开发转行全攻略:从零基础到高薪就业的完整学习路线【必收藏】

本文详细介绍了转行大模型开发所需的知识体系、能力要求及学习路径。内容涵盖编程语言、数学基础、机器学习、NLP、大模型架构等核心知识,并提供了从入门到专业的分阶段学习路线。文章通过实际案例和数据分析了大模型开发的应用前景和薪资水平,为转行者提…

作者头像 李华
网站建设 2026/2/27 6:11:45

java springboot基于微信小程序的大学教师考核管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 摘要:传统大学教师考核方式存在流程繁琐、数据统计困难等问题。本文提出…

作者头像 李华