【算法day13】二叉树:递归与回溯
题目引用
- 找树左下角的值
- 路径总和
- 从中序与后序遍历构造二叉树
今天就简简单单三道题吧~
1. 找到树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
我们来分析一下题目,最底层的叶子节点,所以我们要求出树的深度,并且进行判断他是否到达底层。首先我们定义一个全局变量res和全局变量maxDep来记录递归过程中更深的节点和更深节点的值。然后我们判断当前节点有没有左右孩子节点,如果有我们递归进那个节点并更新res和maxDep,同时定义局部变量depth将其++后传进下一层,当其操作完返回这一层时将depth--,用作向右孩子递归的参数。而这个过程就叫做回溯。
我们来看代码
int res;int maxDep=INT_MIN;void travisal(TreeNode* root,int depth){if(root->left==NULL&&root->right==NULL){if(depth>maxDep){maxDep=depth;res=root->val;}return;}if(root->left){depth++;travisal(root->left,depth);depth--;}if(root->right){depth++;travisal(root->right,depth);depth--;}}int findBottomLeftValue(TreeNode* root) {travisal(root,0);return res;}
2.路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
我们来看题目,这道题其实知道了原理就和上道题大差不差了。上一道题目是找到最底层的节点的值,而这一道题目是找到一条相加为0的路径,两道题目都需要我们在二叉树中一层一层的寻找符合条件的节点并且返回它,那么我们是不是不难写出这样的模版
看情况返回类型 traversal(TreeNode* root,//第二变量用于判断){//对每一个节点要做的操作if(root->left){//增加条件//递归左边//减少条件}if(root->right){//增加条件//递归右边//减少条件}//考虑是否返回}
那么我们在这道题就将相加改为一开始就有一个变量等于targetSum,逐层减去每个节点的val,一旦==0,就返回true。
来看代码:
bool traversal(TreeNode* root,int count){if(!root->left&&!root->right&&count==0) return true;if(!root->left&&!root->right) return false;if(root->left){count-=root->left->val;if(traversal(root->left,count)) return true;count+=root->left->val;}if(root->right){count-=root->right->val;if(traversal(root->right,count)) return true;count+=root->right->val;}return false;}bool hasPathSum(TreeNode* root, int targetSum) {if(root==NULL) return false;return traversal(root,targetSum-root->val);}
大家看,一旦我们整理出规律,是不是这类题目我们只要考虑细节条件就能迎刃而解呢?
3.从中序与后序遍历构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
示例 1:
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]
这道题目我们在学习数据结构时就做过,现在只要模拟过程就能解决啦。直接看代码
TreeNode* traversal(vector<int>& inorder,vector<int>& postorder){if(postorder.size()==0) return NULL;int rootValue=postorder[postorder.size()-1];TreeNode* root=new TreeNode(rootValue);if(postorder.size()==1) return root;int delimitIndex;for(delimitIndex=0;delimitIndex<inorder.size();delimitIndex++){if(inorder[delimitIndex]==rootValue) break;}vector<int> leftInorder(inorder.begin(),inorder.begin()+delimitIndex);vector<int> rightInorder(inorder.begin()+delimitIndex+1,inorder.end());postorder.resize(postorder.size()-1);vector<int> leftPostorder(postorder.begin(),postorder.begin()+leftInorder.size());vector<int> rightPostorder(postorder.begin()+leftInorder.size(),postorder.end());root->left=traversal(leftInorder,leftPostorder);root->right=traversal(rightInorder,rightPostorder);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {if (inorder.size() == 0 || postorder.size() == 0) return NULL;return traversal(inorder, postorder);}
总结
今天的题目其实就是昨天的拓展与提升,大家务必将昨天的消化了再来做今天的题目。
相关文章:
【算法day13】二叉树:递归与回溯
题目引用 找树左下角的值路径总和从中序与后序遍历构造二叉树 今天就简简单单三道题吧~ 1. 找到树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 我们…...
上海亚商投顾:创业板指缩量下跌 多只高位股午后跌停
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整,创业板指领跌,高位股开始出现退潮,建设工业、星光股份、…...
单步调试Android Framework——App冷启动
纸上得来终觉浅,绝知此事要躬行。 —— [宋]陆游 基于aosp_cf_x86_64_phone-trunk_staging-eng , 下面是具体断点位置。 第一部分,桌面launcher进程 com.android.launcher3.touch.ItemClickHandler onClickonClickAppShortcutstartAppShor…...
统计一个目录下的文件及目录数量-linux010
要统计一个目录下的文件数量(包括子目录中的文件),可以使用以下命令: 1. 统计所有文件数量(包括子目录) 在终端中运行以下命令: find /path/to/directory -type f | wc -l 解释:…...
spring RestTemplate使用说明
rest-template是spring对httpclient的逻辑封装,它底层还是基于httpclient,所以一些配置其实跟httpclient是强相关的。 基本配置 rest-template可以不带参数,使用默认配置,也可以指定ClientHttpRequestFactory参数,Cl…...
thinkphp:try-catch捕获异常
使用简单的例子,实现了一个简单的try-catch捕获异常的实例 //开始事务Db::startTrans(); try{ //有异常抛出异常 if(存在错误){ throw new \Exception("异常信息"); } // 提交事务 Db::commit(); // 返回成功信息 ... } catch (\…...
shardingsphere分库分表跨库访问 添加分片规则
shardingsphere分库分表跨库访问 添加分片规则 建立 JDBC 环境 创建表 t_order: CREATE TABLE t_order (tid bigint(20) NOT NULL,tname varchar(255) DEFAULT NULL,goods_id bigint(20) DEFAULT NULL,tstatus varchar(255) DEFAULT NULL,PRIMARY KEY (tid) ) E…...
c++:std::map下标运算符的不合理使用
这是我分析之前遗留代码时发现的一个隐藏点;不过我并不认为这样使用std::map是合理的。 看看简化后的代码,v1、v2的值应该是多少呢? #include <map>std::map<int, int> cm[2];int get_cm_value(int device, int ctrl) { auto …...
KeyFormer:使用注意力分数压缩KV缓存
Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403,发表在Mlsys Introduction 优化KV cache的策略,主要是集中在系统级别的优化上,比如FlashAttention、PagedAttention,它…...
MetaGPT源码 (ContextMixin 类)
目录 理解 ContextMixin什么是 ContextMixin?主要组件实现细节 测试 ContextMixin示例:ModelX1. 配置优先级2. 多继承3. 多继承重写4. 配置优先级 在本文中,我们将探索 ContextMixin 类,它在多重继承场景中的集成及其在 Python 配…...
MATLAB生成.exe独立程序过程(常见问题解决方法)(2024.12.14)
本文只记录我执行过程中遇到的关键问题、以及解决方法,不讲诉整个流程。 电脑环境 win11系统 matlab 2024b 版本 整体流程 1.下载matlab运行时库,简写为MCR 2.配置MCR环境 3.打包程序 4.目标机器安装程序 一、下载MCR 下载这个折腾了大半天,大概问题就是…...
PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环
效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…...
ChatGPT搜索全新升级,向全体用户开放,近屿智能助力AI行业发展
12月17日,OpenAI在第八天直播中正式宣布ChatGPT搜索功能全面升级,并即日起对所有ChatGPT用户开放。此次更新不仅带来了显著的性能提升,还引入了多项突破性功能,如更快的搜索速度、全新的地图体验以及YouTube视频嵌入,为…...
win10配置免密ssh登录远程的ubuntu
为了在终端ssh远程和使用VScode远程我的VM上的ubuntu不需要设置密码,需要在win10配置免密ssh登录远程的ubuntu。 在win10打开cmd,执行下面的代码生成密钥对(会提示进行设置,按照默认的配置就行,一直回车)&…...
skywalking 搭建 备忘录
基础环境 apache-skywalking-apm-9.6.0.tar.gz apache-skywalking-java-agent-9.1.0.tgz elasticsearch 7.14.1 采用dockers搭建 或者手动部署 kibana 可视化 应用 微服务版 consumer.jar eureka.jar 注册中心 provider.jar skywalking 地址 https://skywalkin…...
linux日常常用命令(AI向)
进程挂后台运行 nohup sh ./scripts/*****.sh > ./output/*****.log 2>&1 &删除***用户的所有python进程 pkill -u *** -f "^python"列出“***”用户的进程信息 ps aux --sort-%mem | grep ^***git add ./*git commit -m "注释"git push …...
信奥赛CSP-J复赛集训(bfs专题)(5):洛谷P3395:路障
信奥赛CSP-J复赛集训(bfs专题-刷题题单及题解)(5):洛谷P3395:路障 题目描述 B 君站在一个 n n n\times n n...
《红队和蓝队在网络安全中的定义与分工》
网络安全中什么是红队蓝队 在网络安全领域,红队和蓝队是一种对抗性的演练机制,用于测试和提升网络安全防御能力。 红队(Red Team) 定义与目标 红队是扮演攻击者角色的团队。他们的主要任务是模拟真实的网络攻击,利用各…...
李宏毅深度强化学习入门笔记:PPO
李宏毅-深度强化学习-入门笔记:PPO 一、Policy Gradient(一)基本元素(二)Policy of Actor1. Policy π \pi π 是带有参数 θ \theta θ 的 network2. 例子:运行流程 (三)Actor, E…...
vue2项目中如何把rem设置为固定的100px
在 Vue 2 项目中,可以通过动态设置 html 元素的 font-size 来将 1rem 固定为 100px。以下是具体步骤: 在项目的入口文件 main.js 中添加以下代码,用于动态设置 html 的 font-size: // main.js function setHtmlFontSize() {cons…...
ComfyUI-Manager下载加速三阶段优化方案:从单线程到多线程的300%性能提升
ComfyUI-Manager下载加速三阶段优化方案:从单线程到多线程的300%性能提升 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and en…...
从手机信令到城市画像:数据驱动的精细化人口洞察与规划实践
1. 手机信令数据:城市管理的"数字显微镜" 每天早上7点,北京西二旗地铁站的闸机前总会排起长队。这种肉眼可见的通勤潮汐,其实只是城市人口流动的冰山一角。而手机信令数据就像一台高精度显微镜,能让我们看清城市运行的每…...
公开信息整理|2026年4月4日:消费复苏、金融调节、教育规范、科技安全与部分国际动态速览
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
电力设施智能检测:TTPLA数据集赋能电网巡检自动化全流程指南
电力设施智能检测:TTPLA数据集赋能电网巡检自动化全流程指南 【免费下载链接】ttpla_dataset aerial images dataset on transmission towers and power lines 项目地址: https://gitcode.com/gh_mirrors/tt/ttpla_dataset 在电力行业数字化转型进程中&…...
ha_xiaomi_home:小米智能家居与Home Assistant无缝集成指南
ha_xiaomi_home:小米智能家居与Home Assistant无缝集成指南 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home ha_xiaomi_home是一款开源工具,能帮…...
HeyGem数字人视频生成系统批量版:快速部署与使用,新手入门全攻略
HeyGem数字人视频生成系统批量版:快速部署与使用,新手入门全攻略 1. 系统概述与核心价值 HeyGem数字人视频生成系统批量版是一款基于AI技术的智能视频合成工具,能够将音频与视频素材智能结合,生成口型同步的数字人视频。科哥的二…...
Windows 平台 Tongsuo 国密 NTLS 编译实战:从环境搭建到库文件生成
1. 环境准备:搭建Windows编译工具链 第一次在Windows上编译Tongsuo国密库的经历让我记忆犹新。当时为了赶项目进度,我连续折腾了三天才搞定整个环境。现在把这些经验整理出来,希望能帮你少走弯路。 编译Tongsuo国密库需要三个核心工具&#x…...
课堂录音转文字app口碑推荐 | 实测筛选的实用工具清单
2026年我们前后测了12款市面上主流的录音转文字app,最终筛出4款真正适配课堂场景的实用工具,专门针对有课程录音转写需求的学生、考公考证党,不用再挨个下载试错浪费时间。大家找课堂录音转文字工具的核心需求其实都差不多:要么是…...
6个核心步骤构建自定义Minecraft地形世界
6个核心步骤构建自定义Minecraft地形世界 【免费下载链接】ReTerraForged a 1.19 port of https://github.com/TerraForged/TerraForged 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged ReTerraForged是一款专为Minecraft 1.19版本设计的高级地形生成模组&…...
Qwen-Image-Layered实战:一键将图片拆成可编辑图层,设计师效率提升10倍
Qwen-Image-Layered实战:一键将图片拆成可编辑图层,设计师效率提升10倍 你是不是也遇到过这样的场景?客户发来一张产品海报,说“把背景换成星空,把Logo放大一点,再把模特往右移一点”。听起来只是几个简单…...


