代码随想录刷题——二叉树篇(十二)

112. 路径总和

递归法:

class Solution{ public: bool sumPath(TreeNode* node,int count){ # 如果该节点是叶子节点且count被减到0了,那么就返回true if(!node->left&&!node->right&&count==0) return true; # 如果该节点是叶子节点且count不为0,那么就返回false if(!node->left&&!node->right) return false; # 对当前节点进行操作,如果左右子节点存在,继续判断 if(node->left){ if(sumPath(node->left,count-node->left->val)) return true; } if(node->right){ if(sumPath(node->right,count-node->right->val)) return true; } # 左右子节点都判断完了没有返回true,那就是false return false; } bool hasPathSum(TreeNode* root, int targetSum) { if(!root) return false; return sumPath(root,targetSum-root->val); } };

迭代法:

class Solution{ public: bool hasPathSum(TreeNode* root,int targetSum){ if(!root) return false; # 用pair存储 该节点 和 到该节点的路径值的和 两个信息 queue<pair<TreeNode*,int>> qu; qu.push(root,root->val); while(!qu.empty()){ pair<TreeNode*,int> node=qu.front(); qu.pop(); # 和递归类似,如果是叶子节点且count被减到0 if(!node.first->left&&!node.first->right&&node.second==targetSum) return true; # 当前节点的左右子节点操作 if(node.first->left) qu.push(pair<TreeNode*,int>(node.first->left,node.second+node.first->left->val)); if(node.first->right) qu.push(pair<TreeNode*,int>(node.first->right,node.second+node.first->right->val)); } return false; } };

113. 路径总和 II

递归法:

class Solution{ public: void sumPath(TreeNode* node,int target,vector<vector<int>>& ans,vector<int>& vec){ if(!node->left&&!node->right&&target==0){ ans.push_back(vec); return ; } if(!node->left&&!node->right) return ; if(node->left){ vec.push_back(node->left->val); sumPath(node->left,target-node->left->val,ans,vec); vec.pop_back(); } if(node->right){ vec.push_back(node->right->val); sumPath(node->right,target-node->right->val,ans,vec); vec.pop_back(); } return ; } vector<vector<int>> pathSum(TreeNode* root, int targetSum) { vector<vector<int>> ans; if(!root) return ans; vector<int> vec; vec.push_back(root->val); sumPath(root,targetSum-root->val,ans,vec); return ans; } };

其他:

(1)再看递归三部曲:

a.确定参数返回类型(如果需要遍历整个二叉树,可以不需要返回值,如果需要操作递归返回值,就需要返回值)

b.确定终止条件(如果在叶子节点终止,就可以通过条件判断避免遍历空节点

c.确定单层递归逻辑(最外层区域要如何操作和return

(2)113题中的回溯可以用全局变量实现,我的写法里是用的引用变量,也可以用全局变量来实现
(3)这两道题和之前的所有路径那道题类似,都是递归+回溯的形式

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

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

相关文章

eclipse配置Spring

1、从eclipse下载Spring工具 进入 help – install new software… &#xff0c;如下图&#xff1a; 点击 add &#xff0c;按以下方式输入&#xff1a; Name : Spring Location : http://dist.springsource.com/release/TOOLS/update/e4.10/ 之后点击 add &#xff0c;等待…

Go基础之环境搭建

文章目录 1 Go 1.1 简介 1.1.1 定义1.1.2 特点用途 1.2 环境配置 1.2.1 下载安装1.2.2 环境配置 1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules 1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源 1.3.3.1 通过 go env 配置1.…

C#数据库操作系列---SqlSugar完结篇

1. 不同寻常的查询 之前介绍了针对单个表的查询&#xff0c;同样也是相对简单的查询模式。虽然开发完全够用&#xff0c;但是难免会遇到一些特殊的情况。而下面这些方法就是为了解决这些意料之外。 1.1 多表查询 SqlSugar提供了一种特殊的多表查询方案&#xff0c;使用IQueryab…

docker启动redis简单方法

1、拉取redis镜像 docker pull redis2、在本地某个位置创建以下内容 建议将以下内容放在一起&#xff0c;方便以后管理和查看 # 以/docker/redis为例 mkdir -p /docker/redis mkdir -p /docker/redis/data touch /docker/redis/redis.conf touch /docker/redis/redis.bash3、…

DVWA靶场通关——SQL Injection篇

一&#xff0c;Low难度下unionget字符串select****注入 1&#xff0c;首先手工注入判断是否存在SQL注入漏洞&#xff0c;输入1这是正常回显的结果&#xff0c;再键入1’ You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versio…

基于Django的网络设备租赁系统设计与实现-计算机毕业设计源码+LW文档

摘 要 近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;网络设备租赁系统利用计算机网络实现信息化管理&#xff0c;使整个网络设备租赁的发展和服务水平有显著提升。在系统开发过程中…

二分猜答案

二分前后缀分解lc786二分查找分数值范围&#xff0c;统计小于等于中间值的分数个数&#xff0c;定位第k小的素数分数并返回#include <vector> using namespace std;class Solution { private:vector<int> arr;int n, a, b; public:vector<int> kthSmallestPr…

二分猜答案

二分前后缀分解lc786二分查找分数值范围&#xff0c;统计小于等于中间值的分数个数&#xff0c;定位第k小的素数分数并返回#include <vector> using namespace std;class Solution { private:vector<int> arr;int n, a, b; public:vector<int> kthSmallestPr…

嵌入式工程师面试宝典:常见算法题与底层驱动问题解析

文章目录摘要1. 开发环境配置1.1 硬件与工具链1.2 环境搭建步骤2. 算法题实战解析2.1 链表操作2.2 树结构应用3. 底层驱动开发实战3.1 GPIO控制LED3.2 SPI通信协议4. 综合案例&#xff1a;智能传感器系统架构设计低功耗优化关键代码5. 调试与问题处理常见问题解决方案&#xff…

基于Django的在线课程学习平台-计算机毕业设计源码+LW文档

摘要 在信息技术飞速发展的当下&#xff0c;教育领域正经历着深刻的变革。传统的线下教学模式逐渐无法满足人们日益多样化和个性化的学习需求&#xff0c;在线课程学习平台应运而生。它打破了时间和空间的限制&#xff0c;为学生、教师提供了更加便捷、高效的学习和教学环境。越…

rust学习-探讨为什么需要标注生命周期

rust学习-探讨为什么需要标注生命周期生命周期标注到底在做什么&#xff1f;原始代码&#xff08;没有标注&#xff09;添加标注后关键&#xff1a;标注是契约&#xff0c;不是控制例子1&#xff1a;标注如何帮助编译器验证更直观的比喻&#xff1a;租房合同生命周期标注的实际…

Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql

一、Docker 之mysql安装配置 步骤一&#xff1a;拉取镜像 1. 查看是否包含已安装的mysql。 docker images | grep mysql 2. 如上图所示&#xff0c;我们有mysql镜像&#xff0c;所以不必对mysql镜像进行拉取&#xff0c;如若没有上图中的惊喜&#xff0c;使用如下命令进行拉取…

DeepSeek R1 简易指南:架构、本地部署和硬件要求

DeepSeek 团队近期发布的DeepSeek-R1技术论文展示了其在增强大语言模型推理能力方面的创新实践。该研究突破性地采用强化学习&#xff08;Reinforcement Learning&#xff09;作为核心训练范式&#xff0c;在不依赖大规模监督微调的前提下显著提升了模型的复杂问题求解能力。 技…

深入解析DDR内存原理、测试方法及在嵌入式系统中的应用

文章目录摘要1. DDR内存核心技术解析1.1 物理架构与存储原理1.2 关键时序参数2. DDR测试方法与工具链2.1 测试环境搭建2.2 MemTest86测试流程3. 嵌入式系统集成实践3.1 ARM Cortex-A内存控制器配置4. 完整测试代码实现5. 常见问题解决5.1 信号完整性问题6. 成果展示技术图谱摘要…

基于Python的智能房价分析与预测系统设计-计算机毕业设计源码+LW文档

摘 要 房地产市场一直在发展&#xff0c;房价问题引起社会广泛关注。分析房价很重要&#xff0c;购房者需要这些信息&#xff0c;投资者需要这些数据&#xff0c;房地产企业也需要参考这些结果。传统房价分析方法存在不足&#xff0c;主要依靠个人经验&#xff0c;使用数据量较…

CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现

操作&#xff1a; 根据CVE-2024-38819&#xff1a;Spring 框架路径遍历 PoC 漏洞搭建复现的靶场环境 拿到环境的源码使用docker搭建 cd vuln创建容器并启动 docker build -t cve-2024-38819-poc .docker run -d -p 8080:8080 --name cve-2024-38819-poc cve-2024-38819-poc注…

基于Python爬虫的网络小说热度分析django-计算机毕业设计源码+LW文档

摘 要 在数字化信息飞速发展的当下&#xff0c;网络文学市场规模不断扩大&#xff0c;网络小说热度分析对于了解读者喜好、优化平台运营具有重要意义。随着互联网技术的持续演进&#xff0c;海量的网络小说数据蕴含着丰富的读者行为和偏好信息&#xff0c;如何从中挖掘有价值的…

com.microsoft.sqlserversqljdbc4jar4.0 was not found产生原因及解决步骤

文章目录 问题 sqlserver 包找不到 报错原因分析 主要原因 解决方案 步骤 1&#xff1a;检查 pom.xml 中的依赖声明步骤 2&#xff1a;配置 Microsoft 的 Maven 仓库步骤 3&#xff1a;强制更新 Maven 依赖步骤 4&#xff1a;清理本地仓库缓存步骤 5&#xff1a;手动下载并安装…

2026年最新爆火!7款AI论文写作神器限时实测,一键生成文献综述与真实交叉引用

引言&#xff1a;DDL前24小时的绝望&#xff1f;这篇急救指南能救你 凌晨3点&#xff0c;电脑屏幕亮着未完成的论文初稿&#xff0c;文献综述还缺30篇引用&#xff0c;导师的修改意见堆了3页——这是不是你赶论文时的真实写照&#xff1f; 2026年学术圈已经卷到“用AI抢时间”…