LeetCode 113—— 路径总和 II

阅读目录

    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现

1. 题目

2. 解题思路

看到树的问题一般我们先考虑一下是否能用递归来做。

假设 root 节点的值为 value,如果根节点的左子树有一个路径总和等于 targetSum - value,那么只需要将根节点的值插入到这个路径列表中作为第一个元素即可。同理,右子树也是一样。

最后,我们只需要特别处理一下边界条件即可:

  • 如果树是空的,那么直接返回一个空的列表。

  • 如果到达了叶子结点,而且叶子结点的值等于 targetSum,那么就返回一个包含叶子结点值的列表。

3. 代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> pathSum(TreeNode* root, int targetSum) {vector<vector<int> > ret;if (root == nullptr) {return ret;}if (root->left == nullptr && root->right == nullptr && root->val == targetSum) {vector<int> a(1, targetSum);ret.push_back(a);return ret;}vector<vector<int> > left_res = pathSum(root->left, targetSum-root->val);vector<vector<int> > right_res = pathSum(root->right, targetSum-root->val);for (size_t i = 0; i < left_res.size(); ++i) {left_res[i].insert(left_res[i].begin(), root->val);ret.push_back(left_res[i]);}for (size_t i = 0; i < right_res.size(); ++i) {right_res[i].insert(right_res[i].begin(), root->val);ret.push_back(right_res[i]);}return ret;}
};

上面代码的实现思路比较好理解,但是 insert 比较耗时,能不能直接 push_back 呢?

我们定义一个 path,访问到某一个节点后,就把这个节点的值添加到 path 中去,然后再分别递归调用左子树和右子树,只不过我们这里传入一个 path 的引用,当访问到叶子结点并且叶子结点的值刚好等于 targetSum,这时候的 path 刚好是一个满足条件的路径,我们把它放入到结果中去。

然后,把当前节点的值 pop_back 出去,回到上一级节点继续搜索其它路径。

class Solution {
public:vector<vector<int> > ret;void dfs(TreeNode* root, int targetSum, vector<int>& path) {if (root == nullptr) {return;}path.emplace_back(root->val);if (root->left == nullptr && root->right == nullptr && root->val == targetSum) {ret.emplace_back(path);}dfs(root->left, targetSum-root->val, path);dfs(root->right, targetSum-root->val, path);path.pop_back();}vector<vector<int>> pathSum(TreeNode* root, int targetSum) {vector<int> path;dfs(root, targetSum, path);return ret;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球首个AI女团Sorai.ai出道:定档4月19日北京电影节出道首秀

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

.net 6.0如何直接读取appsetting.json配置文件

现在有一个appsetting.json配置文件&#xff0c;里面有个setting下的url地址&#xff0c;需要读取&#xff0c;如下&#xff1a; {"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning",&…

【C++】开始使用stack 与 queue

送给大家一句话&#xff1a; 忍受现实给予我们的苦难和幸福&#xff0c;无聊和平庸。 – 余华 《活着》 开始使用queue 与 stack 1 前言2 stack与queue2.1 stack 栈2.2 queue 队列2.3 使用手册 3 开始使用Leetcode 155.最小栈牛客 JZ31 栈的弹出压入序列Leetcode 150.逆波兰表达…

go work模块与go mod包管理是的注意事项

如下图所示目录结构 cmd中是服务的包&#xff0c;显然auth,dbtables,pkg都是为cmd服务的。 首先需要需要将auth,dbtables,pkg定义到go.work中&#xff0c;如下&#xff1a; 在这样在各个单独的go mod管理的模块就可以互相调用了。一般情况下这些都是IDE自动进行的&#xff0c;…

面试问答之转账功能测试点详解

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

三.吊打面试官系列-数据库优化-索引优化实战

SQL的执行流程 mysql主要分为Server层和存储引擎层&#xff0c;Server层&#xff1a;主要包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;所有跨存储引擎的功能都在这一层实现&#xff0c;比如存储过程、触发器、视图&#xff0c;函数等&#xff0c;还有一个通用…

[C++][算法基础]判定二分图(染色法)

给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行&#xff0c;每行包含两个整数 u 和 v&#xff0c;表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图是二分图…

中国科学院大学学位论文LaTeX模版

Word排版太麻烦了&#xff0c;公式也不好敲&#xff0c;推荐用LaTeX模版&#xff0c;全自动 官方模版下载位置&#xff1a;国科大sep系统 → \rightarrow → 培养指导 → \rightarrow → 论文 → \rightarrow → 论文格式检测 → \rightarrow → 撰写模板下载百度云&#…

Android沙盒机制

Android沙盒机制 Android Q文件存储机制修改成了沙盒模式&#xff0c;应用只能访问自己沙盒下的文件和公共媒体文件 存储&#xff08;也就是write&#xff09;私有目录和公共媒体文件都不需要WRITE_EXTERNAL_STORAGE权限读取&#xff08;也就是read&#xff09;私有目录不需要…

福布斯发布2024年人工智能初创企业50强

随着人工智能热潮的持续&#xff0c;一种新的技术经济正在帮助企业开发和部署人工智能驱动的应用程序。在《福布斯》第六届年度“人工智能50强”榜单上&#xff0c;这类新锐企业正大行其道。该榜单遴选了AI领域最有前途的初创公司&#xff0c;由《福布斯》在领先行业专家的帮助…

推荐两个植物miRNA数据库(miRbase和PNRD)

前记 植物miRNA数据库是储存和整理植物微小RNA&#xff08;miRNA&#xff09;相关信息的数据库。miRNA是一类长度为21-24个核苷酸的非编码小分子RNA&#xff0c;能够通过与靶基因的mRNA结合&#xff0c;调控基因表达。植物miRNA数据库通常包含以下内容&#xff1a; miRNA序列信…

蓝桥杯刷题-数星星

1265. 数星星 - AcWing题库 /* 题目中的y是递增&#xff0c;不影响 */ /* 直接看作一维数组的更新维护 */ /* 将数据二进制化&#xff0c;拿最低位的1 */ /* 转化为线段树的解法才是核心 */ /* 思想是前缀和 */ #include <bits/stdc.h>using namespace std;const int N …

HTML中div/span标签、音频标签、视频标签与特殊字符

目录 div/span标签 音频标签 视频标签 特殊字符 div/span标签 在HTML中&#xff0c;<div></div>和<span></span>是没有语义的&#xff0c;可以将两个标签当做两个盒子&#xff0c;里面可以容纳内容 两个标签有以下两个特点&#xff1a; 1. <…

简约风好看的个人主页源码

效果图 PC端 移动端 源代码 index.html &#xfeff;<html lang"en"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&quo…

apk反编译

APK文件可以通过多个工具反编译&#xff0c;以便查看包含在其中的Java源文件。但是&#xff0c;需要注意的是&#xff0c;通常通过反编译得到的不是原始的Java源代码&#xff0c;而是反编译后的代码&#xff0c;这意味着它可能已经被转换成了类似于原始Java代码的形式&#xff…

AI智能分析网关V4平台告警数据清理方法:自动清理与手动清理

TSINGSEE青犀智能分析网关V4属于高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;目前拥有3种型号&#xff08;8路/16路/32路&#xff09;&#xff0c;支持Caffe/DarkNet/TensorFlow/PyTorch/MXNet/ONNX/PaddlePaddle等主流深度学习框架。硬件内部署了近40种AI算法模型…

[CSP-J 2023] 小苹果

[CSP-J 2023] 小苹果 题目描述 小 Y 的桌子上放着 n n n 个苹果从左到右排成一列&#xff0c;编号为从 1 1 1 到 n n n。 小苞是小 Y 的好朋友&#xff0c;每天她都会从中拿走一些苹果。 每天在拿的时候&#xff0c;小苞都是从左侧第 1 1 1 个苹果开始、每隔 2 2 2 个…

无法将 null 字面量转换为非 nul 的引用类型

这个错误信息“无法将 null 字面量转换为非 nul 的引用类型”通常出现在编程时&#xff0c;特别是在使用 C# 或类似的强类型语言时。这个错误意味着你试图将一个 null 值赋给一个非可空&#xff08;non-nullable&#xff09;的引用类型变量。 在 C# 8.0 及更高版本中&#xff…

AIGC高效进行网页总结的工具使用

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

C语言基础入门案例(3)

目录 第一题&#xff1a;一维数组的最大值和最小值求解 第二题&#xff1a;求一维数组中的第二大的数 第三题&#xff1a;计算5个整数的平均值 第四题&#xff1a;查找整数在数组中的索引位置 第五题&#xff1a;统计字符串中数字字符的个数 第一题&#xff1a;一维数组的…