数据结构学习 jz34 二叉树中和为某一值的路径

关键词:回溯 二叉树 前序遍历 路径记录

因为我没有仔细接触过二叉树的遍历过程,所以我是懵懵懂懂按照dfs的方法写的。没想到写对了,看了解答发现这叫做二叉树的前序遍历。用时29min。

这让我明白了前序遍历和dfs原来是有相同之处的。(我甚至想按照习惯给它剪枝,后来发现不太行,每条路都必须走一遍才行,我似乎又懂得了许多呢!)

题目:

思路:

注意这里是每个节点都要访问到的,不能剪枝!!!

容器:

得弄两个vector。

std::vector<std::vector<int>> res:记录最后要返回的结果。

std::vector<int> temp:记录中途的路径,如果有符合的路径,就把这个vector push到res里面。

sum记录中途的结果。

注意:函数形参里的std::vector<int>& temp不要漏引用,不然内存会多用很多!

中止条件:

到达叶子节点就停: (别剪枝)

 if (root->left == nullptr && root->right == nullptr)

逐个查询:

这里有两个要查询的东西,左节点和右节点。

if (root->left != nullptr)dfs(root->left, target, temp, sum + root->val);
if (root->right != nullptr)dfs(root->right, target, temp, sum + root->val);

复杂度计算:

时间复杂度O(n)

空间复杂度O(n) 主要是统计temp用掉的额外空间,如果数退化成链表,就需要n

代码:

#include <vector>
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:std::vector<std::vector<int>> res;std::vector<std::vector<int>> pathTarget(TreeNode* root, int target) {if (root == nullptr) return res;std::vector<int> temp;dfs(root, target, temp, 0);return res;}void dfs(TreeNode* root, int target, std::vector<int>& temp, int sum){temp.push_back(root->val);if (root->left == nullptr && root->right == nullptr)//如果叶子节点{if (sum + root->val == target)//如果符合{res.push_back(temp);}}else{if (root->left != nullptr)dfs(root->left, target, temp, sum + root->val);if (root->right != nullptr)dfs(root->right, target, temp, sum + root->val);}temp.pop_back();//回溯return;}};

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

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

相关文章

Local server not started, start with 报错python -m weditor

一、python -m weditor 如图报错 Local server not started, start with 报错 二、解决方案 右上角选择新的无痕窗口下&#xff0c;然后打开 http://localhost:17310/ 即可

2401C++,无栈协程核心概念

无栈协程本质是个可多次执行的状态机.一般使用协程的标准流程是,生成一个状态机,返回状态机的(协柄)句柄,通过控制该句柄,不断反复执行(恢复). 执行过程中,该状态机作用是:不停产生数据并写到某个地方.所以c20协程提供了协产和协中,同时,每个协程都应有个实现了产生值或中值函…

OBJECT 划分

5、Object 划分 1.PO(persistant object) 持久对象 PO 就是对应数据库中某个表中的一条记录&#xff0c;多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。 2.DO&#xff08;Domain Object&#xff09;领域对象 就是从现实世界中抽象出来的有形或无形的业务实体…

React与Vue性能对比:两大前端框架的性能

React和Vue是当今最流行的两个前端框架&#xff0c;它们在性能方面都有着出色的表现。 React的加载速度&#xff1a; 初次加载&#xff1a;由于React使用了虚拟DOM&#xff08;Virtual DOM&#xff09;技术&#xff0c;它可以通过比较虚拟DOM树与实际DOM树的差异来进行高效的…

PCIe 6.0生态业内进展分析总结-2

3.PCIe 6.0协议分析仪 (1)Keysight Keysight是德科技在2023年6月份对外宣布&#xff0c;第一款支持PCIe 6.0协议验证调试工具。 Keysight PCIe 6.0架构解决方案具备以下特点&#xff1a; 分析PCIe 6.0技术设计的数据链路/事务层 支持所有PCIe技术速率——从2.5 GT/s至64 GT/…

实验笔记之——基于COLMAP的Instant-NGP与3D Gaussian Splatting的对比

之前博客进行了COLMAP在服务器下的测试 实验笔记之——Linux实现COLMAP-CSDN博客文章浏览阅读794次&#xff0c;点赞24次&#xff0c;收藏6次。学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客NeRF 所做的任务是 Novel View Synthesis&#xf…

《PySpark大数据分析实战》-25.数据可视化图表Matplotlib介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

2024-01-04 用llama.cpp部署本地llama2-7b大模型

点击 <C 语言编程核心突破> 快速C语言入门 用llama.cpp部署本地llama2-7b大模型 前言一、下载llama.cpp以及llama2-7B模型文件二、具体调用总结 使用协议: License to use Creative Commons Zero - CC0 该图片个人及商用免费&#xff0c;无需显示归属&#xff0c;但如果…

阿里通义千问「全民舞王」,一张照片就能跳《科目三》,刷爆朋友圈

这两天看朋友圈、网上都在发这种跳舞的视频。只要上传一张全身照&#xff0c;就可以生成各种跳舞的视频。 比如前段时间火爆海底捞的《科目三》&#xff0c;还有《DJ慢摇》、《鬼步舞》、《兔子舞》、甚至还有咱《秧歌舞》。 先来一睹为快&#xff01; 阿里通义千问「全民舞王…

虚拟机(克隆)导入/导出镜像(OVAOVF)

一.了解虚拟化和 UEFI 虚拟化是一种技术&#xff0c;通过在物理硬件上创建虚拟的计算环境&#xff0c;使得多个操作系统和应用程序可以在同一台计算机上同时运行。虚拟机是在这个虚拟化环境中运行的实例&#xff0c;它们需要被赋予操作系统和固件等系统软件来进行运行。UEFI&a…

Spring学习之——注入DI(Dependence Injection)

注入DI&#xff08;Dependence Injection&#xff09; 概念&#xff08;什么是注入&#xff09; DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;在Spring创建对象的同时&#xff0c;为其属性赋值&#xff0c;称之为依赖注入。 注入方式一&#xff1a;…

Python+selenium+chromedriver实现爬虫示例代码

下载好所需程序 1.Selenium简介 Selenium是一个用于Web应用程序测试的工具&#xff0c;直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 2.Selenium安装 方法一&#xff1a;在Windows命令行&#xff08;cmd&#xff09;输入pip install selenium即可自动安装&am…

炫酷的倒计时引导页

文章目录 文件分布介绍效果预览代码css样式Locationplayer.css js样式player.js 文件分布介绍 效果预览 代码 css样式 Location html {height: 100%;}body {font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hirag…

利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式

举个例子吧,目前的业务需要把取到的数据,进行分组,然后好用另一个方法进行数据处理。 然后,就以下面的为例子,将取到的list集合,将取到的数据以性别分组,以性别为K,以性别数量为v,。 代码示例: package Lx;import java.util.ArrayList; import java.util.List; imp…

c语言-函数指针

目录 前言一、函数指针1.1 函数指针定义1.2 函数指针调用函数1.3 函数指针代码分析 总结 前言 本篇文章介绍c语言中的函数指针以及函数指针的应用。 一、函数指针 函数指针&#xff1a;指向函数的指针。 函数在编译时分配地址。 &函数名 和 函数名代表的意义相同&#xf…

外包干了3个多月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

SpringIOC之support模块DefaultMessageSourceResolvable

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Profinet转Modbus网关助你畅享智能工业

Modbus转Profinet网关&#xff08;XD-MDPN100/200&#xff09;具有广泛的应用价值。无论是汽车制造、机械加工还是能源管理&#xff0c;都可以通过使用该网关&#xff0c;实现设备之间的高效通信。其次&#xff0c;Modbus转Profinet网关&#xff08;XD-MDPN100/200&#xff09;…

Java中 super 和 this 对比着学习

1、super是一个关键字&#xff0c;全部小写。 2、super 和 this 对比着学习。 this&#xff1a; this 能出现在实例方法和构造方法中。 this 的语法是&#xff1a;“this.”、“this()” this 不能使用在静态方法中。 this. 大部分情况下是可以省略的。 this. 什么时候不能省略…

matlab中如何将视频保存成图像

利用MATLAB将视频的每一帧保存成一幅图像&#xff0c;并自动命名。本文方法简单&#xff0c;容易学习。 首先&#xff0c;读入视频。代码如下&#xff1a; mov VideoReader(xxxxxx.avi); % 将xxxxxx.avi读入MATLAB中&#xff0c;并用名为mov的结构体保存 fnum mov.Numbe…