【LeetCode: 113. 路径总和 II + 二叉树 + 递归】

(第32天) 513、找树左下角的值 112、路径总和 113、路径总和II 判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。找出所有符合要求的路径,这就需要在上一题的基础上遍历整颗二叉树,一遇到符合要求的路径就把这条路径加入结果集。给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。严格来说,本题的目的是寻找一条符合要求的路径,而遍历整颗二叉树不是必须的。 阅读详情

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

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

示例 1:
在这里插入图片描述

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

示例 2:

在这里插入图片描述

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

输入:root = [1,2], targetSum = 0
输出:[]

提示:

树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000

🌟 求解思路&实现代码&运行结果


⚡ 二叉树 + 递归

🥦 求解思路
  1. 初始化:在 pathSum 方法中,创建结果列表 ans 和临时路径列表 list。
  2. 深度优先搜索:调用 dfs 方法开始递归。
  3. 递归终止条件:若当前节点为空,直接返回。
  4. 更新状态:从目标和中减去当前节点值,将当前节点值加入路径列表。
  5. 判断并记录结果:若当前节点是叶子节点且目标和为 0,将当前路径列表加入结果列表,然后移除当前节点值返回上一层。
  6. 递归探索子树:对左右子树分别进行 dfs。
  7. 回溯:递归返回时,移除当前节点值,恢复路径列表状态。最后返回结果列表 ans。
  8. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
/**
 * 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 {
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        dfs(root, targetSum, ans, list);
        return ans;
    }

    public void dfs(TreeNode root, int targetSum, List<List<Integer>> ans, List<Integer> list) {
        if (root == null) {
            return;
        }
        targetSum -= root.val;
        list.add(root.val);
        if (root.left == null && root.right == null && targetSum == 0) {
            ans.add(new ArrayList<Integer>(list));
            list.remove(list.size() - 1);
            return;
        }
        dfs(root.left, targetSum, ans, list);
        dfs(root.right, targetSum, ans, list);
        list.remove(list.size() - 1);
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

Java实现 LeetCode 113 路径总和 II 113. 路径总和 II 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 ... 阅读详情

相关推荐

113. 路径总和 II

叶子节点是指没有子节点的节点。在这个问题中,我们需要寻找的是从根节点到所有叶子节点的路径中,路径和为目标和的那些路径。本题通过深度优先搜索 (DFS) 和回溯算法来解决,能够在遍历二叉树的过程中,找到所有符合条件的路径。通过在递归过程中维护路径和,并在叶子节点时进行判断,能够有效地找到所有符合条件的路径。该解法时间复杂度为 O(N),空间复杂度为 O(N),对于大多数二叉树问题来说,这已经是一个较为高效的解法。希望本篇博客能帮助大家理解路径总和 II。

Lucy_wzw的博客 1239

LeetCode - 112. 路径总和;113. 路径总和 II【进阶】

LeetCode - 112. 路径总和;113. 路径总和 II【进阶】

weixin_45565886的博客 168

二叉树热题(二):对称二叉树、路径总和

【摘要】《算法面试60讲》第26篇聚焦二叉树高频题型,深入解析对称二叉树(LeetCode101)和路径总和(LeetCode112/113)两类经典问题。对称二叉树引入双树同步递归思想,需交叉验证左右子树的内外侧节点;路径总和问题则分为存在性判断(112)和全路径收集(113),后者采用DFS回溯模板,强调叶子节点判定与路径状态管理。两题覆盖递归、迭代、回溯三种解法,提炼出双树对比递归和二叉树回溯两大核心思维模式,并总结短路剪枝、空指针处理、路径拷贝等面试易错点,为树形DP和路径类题型提供通用解题框架。

linwenglong7155的博客 39

力扣算法:513.找树左下角的值 112. 路径总和 113. 路径总和 II 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

力扣算法:513.找树左下角的值 112. 路径总和 113. 路径总和 II 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

m0_51982291的博客 330

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 240

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6387

Leetcode刷题记录111-120,python语言

Leetcode刷题记录111-120,python语言111 二叉树的最小深度(队列queue) 111 二叉树的最小深度(队列queue) 队列queue,遍历每一层的节点,同时从队列queue弹出自己节点,又加入子节点到queue。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val

yuyu12prince的博客 427

【OpenVINO】OpenVINO C# API 常用 API 详解与演示

在本文中我们基于模型推理流程,演示了OpenVINO C# API使用方法,并和OpenVINO C++API进行了对比,展示了OpenVINO C# API与C++API在使用的区别,这也对使用过C++ API的开发者十分友好,上手会十分容易。在本文中我们只展示了基础的模型推理流程代码,也对各个API进行了测试,针对其他比较高级的API方法,我们后续会继续进行测试其他API方法,向各位开发者展示其用法。

grape_yan的博客 1539

【LeetCode113、106】【递归、DFS】每日一题day26、27

LeetCode113…太裸了,实在没啥好说的,但是我写的程序有点慢,就先把代码贴在这看看以后能不能优化一下。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ cla

lyx_2016的博客 139

千兆网口电路设计中的EMC防护与TVS选型实战

本文深入探讨了千兆网口电路设计中面临的EMC挑战,并提供了TVS二极管选型的实战指南。文章分析了ESD、浪涌和EFT等主要威胁,重点阐述了如何根据工作电压、钳位电压和关键的低结电容等参数为PHY芯片选择匹配的TVS器件,以确保在严苛电磁环境下实现可靠的信号完整性与防护。

m3n5b7v8c9x的博客 529

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

代码随想录算法训练营Day-16 | 513.找树左下角的值、112.路径总和、113.路径总和II、106.从中序与后序遍历序列构造二叉树

本文总结了二叉树相关算法题的递归解法思路。对于找树左下角的值(513题),采用深度优先遍历,记录最深左叶子节点值。路径总和问题(112、113题)分别判断是否存在路径和等于目标和、记录所有满足条件的路径,通过递归回溯实现。106题展示了如何利用中序和后序遍历序列重建二叉树,通过递归分割数组确定左右子树。所有解法都详细分析了递归函数的参数、终止条件和单层逻辑,强调回溯思想的应用。文章最后提醒学习时要保证身体健康和充足睡眠,以提高学习效率。

m0_65939761的博客 411

Matlab在线性代数中的应用(一):向量组的线性相关性

求列向量组A的一个最大线性无关组可用命令rref(A)将A化成行最简形,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为其对应向量用最大线性无关组线性表示的系数。 01 — 例1 求下列矩阵列向量组的一个最大无关组。 解:编写脚本文件如下: >>format rat a=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4]; b=rref(a) 求得: b...

wenyusuran的专栏 3235

面试题25 :二叉树中和为某一值的路径

一. Leetcode-129:Sum Root to Leaf Numbers首先看下一道比较简单的题目,输入一个二叉树,输出所有路径代表的十进制数之和。一般二叉树类的题目,肯定要用到递归函数。 本题中递归函数的参数有三个:root,total_sum(引用传递,即最终结果), sum(单条路径的和)递归函数的跳出条件为遍历到叶子节点,返回前要把sum加到total_sum上。int sumNu

罗布泊coding 393

Unity零基础到入门☀️| 万字教程 讲解Unity中的数据存储 PlayerPrefs、XML、JSON【建议收藏】

本文章是Unity零基础到入门专栏的系列文章。 适合对Unity3D引擎感兴趣的小伙伴学习,偏向于新手学习! 本篇文章就来介绍一下Unity中三种基本的数据存储方式:PlayerPrefs、XML、JSON

努力前行,总会成为自己心中的那道光 8万+

深度学习论文: Towards Total Recall in Industrial Anomaly Detection

在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。

mingo_敏 1873

代码随想录第十六天|513.找树左下角的值 、112.路径总和、106.从中序与后序遍历序列构造二叉树

本文摘要:文章分享了二叉树相关算法题的解题思路和代码实现。513题通过记录最大深度来寻找树左下角的值;112题使用回溯法判断是否存在路径和等于目标值;113题扩展为记录所有满足条件的路径;105和106题分别讲解了如何根据中序+后序/前序遍历序列重建二叉树,重点在于数组分割和索引处理。作者指出这些题目需要扎实的二叉树基础,长变量名虽必要但需适应,建议通过反复练习来掌握这些较难的二叉树操作。

Rhystt的博客 763

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

dfs 专题 (79单词搜索+112路径总和+113路径总和Ⅱ+面试题 求和路径 ) 注意加到sum的时机

leetcode 79. 单词搜索 class Solution { public: bool exist(vector<vector<char>>& board, string word) { rows = board.size(), columns = board[0].size(); for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { if (ba

lardoris928的博客 113

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

力扣算法刷题 Day 16

结合之前做过的求所有路径的回溯方法,用递归法,不需要遍历所有节点所以,函数返回值为bool,入口参数为节点和剩余值。为叶子节点且值不为0,返回false. 单层循环逻辑:遍历左子树,回溯;结合之前做过的求所有路径的回溯方法,用递归法,不需要遍历所有节点所以,函数返回值为bool,入口参数为节点和剩余值。为叶子节点且值不为0,返回false. 单层循环逻辑:遍历左子树,回溯;后序序列的最后一个为根,找到中序中该节点对应位置,前面的是左子树,后面的是右子树。要找最左下角的值,我们就需要得知二叉树的深度。

Kiana_kaslana_66的博客 289

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

代码随想录算法训练营第十四天 | 513.找树左下角的值 112. 路径总和,113. 路径总和ii 106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树

我觉得从思路和代码来说,我的做法更好。(我的思路正好与递归法精简版差不多,不同的是答案中结点处理逻辑在递归出口之间,就可以判断targetSum == 0了)对于左右子树的定义和遍历顺序,我的做法和视频不同:我是前序遍历,targetSum减去中结点的值,最后找到叶子结点值正好等于一路减下来的剩余值。重点是切割左中序数组、右中序数组;左后序数组、右后序数组。没有apped,copy扩缩容,放心用切片当参数。

weixin_44721233的博客 539

LeetCode 112. 路径总和 || LeetCode 113. 路径总和ii

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

2301_80211119的博客 1418

LeetCode第113题_路径总和II

给你二叉树的根节点root和一个整数目标和targetSum,找出所有路径总和等于给定目标和的路径。是指没有子节点的节点。

qq_40263592的博客 1832

leetcode112. 路径总和 & leetcode113. 路径总和II,图文并茂,教你完全弄懂DFS,附详细代码

leetcode112. 路径总和 & leetcode113. 路径总和II,图文并茂,教你完全弄懂DFS,附详细代码

热爱C++和golang的学生 2494

LeetCode 112和113 路径总和 路径总和II -- 递归法

文章目录LeetCode 112 路径总和LeetCode 113 路径总和II 参考文章   LeetCode 112 路径总和 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum 题意: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶

今天你学习了吗? 1909

leetcode113. 路径总和 II

113. 路径总和 II 难度中等163 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明:叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11...

少说,多做。 2903
上一篇: 【LeetCode: 112. 路径总和 + 二叉树 + 递归】
下一篇: 【LeetCode: 104. 二叉树的最大深度 + 二叉树 + 递归】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值