数据结构学习 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/ 即可

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…

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…

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;…

异步http接口调用库:httpx

谈到http接口调用&#xff0c;Requests大家并不陌生&#xff0c;例如&#xff0c;robotframework-requests、HttpRunner等HTTP接口测试库/框架都是基于它开发。这里将介绍另一款http接口测试框架:httpx。 它的API和Requests高度一致。 github: GitHub - encode/httpx: A next…

智慧校园的“边缘智能“: 打造未来教育的桥梁

在科技飞速发展的时代&#xff0c;智能已经渗透到我们生活的各个角落。而当智能遇上教育&#xff0c;会激发出怎样的火花呢&#xff1f;今天&#xff0c;我们就来聊聊这个热门话题——智慧校园和边缘智能网关的结合&#xff0c;它们是如何共同塑造未来教育的新形态。 什么是边…

Pygame和Cocos2d

Pygame和Cocos2d都是 Python 中常用的游戏引擎&#xff0c;但它们的设计目标、特点和使用场景略有不同。 Pygame与Cocos2d&#xff0c;目前是使用人数最多的两个Python游戏库。根据某知名产品点评网站的数据显示&#xff0c;排名前五的Python 2D游戏库如下图所示。其中&#x…

CEC2017(Python):六种算法(PSO、DBO、HHO、SSA、DE、GWO)求解CEC2017(提供完整Python代码)

一、6种算法简介 1、粒子群优化算法PSO 2、蜣螂优化算法DBO 3、哈里斯鹰优化算法HHO 4、麻雀搜索算法SSA 5、差分进化算法DE 6、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. …

计算机毕业论文内容参考|基于区块链技术的电子健康记录系统的设计与实现

文章目录 摘要前言绪论课题背景国内外相关研究课题内容区块链技术介绍系统分析用户需求分析系统设计系统实现系统测试总结与展望摘要 本文介绍了基于区块链技术的电子健康记录系统的设计与实现。该系统旨在解决传统电子健康记录系统存在的数据安全性、数据隐私性和数据互操作性…

Visual studio 2010的安装与使用

一、下载及安装 1、下载软件。 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/115RibV7dOI_y8LUGW-94cA?pwd4hrs 提取码&#xff1a;4hrs 2、右键解压下载好的文件。 3、找到cn_visual_2010_……/Setup.hta&#xff0c;双击运行。 4、选择第三个“ Visual…

操作系统期末复习大题---经典进程的同步问题

目录 一、经典进程的同步问题 1. 利用记录型信号量解决生产者—消费者问题 执行流程&#xff1a; ”生产者-消费者”问题模型代码框架如下&#xff1a; 注意&#xff1a; 小结&#xff1a; 复习典型例题&#xff1a; 解答&#xff1a; 2. 利用AND信号量解决生产者——…