<刷题笔记> 力扣105/106题 使用中序+前(后)序构造二叉树

在曾经的博客中,曾经记录过这样一题:

二叉树遍历_牛客题霸_牛客网 (nowcoder.com)

这是一个只需要前序就能构造二叉树的题,因为一旦遇到空,就有"#"作为返回的标志,能够立刻返回。

1. 中序+前序

                                                            

完全可以借鉴引言中的题目的逻辑:整体采用前序构造,即先构造当前节点,再用递归子函数去构建左右节点。一旦左右节点遇到空,就返回。

但是引言中题目可以通过是否等于# 来判断,我们则需要通过中序来判断。

操作方法:前序确定根,中序分割区间

                               

以上图为例:

首先,前序的第一个数据一定是整个二叉树的根(3),我们在中序中找到3,根据中序遍历的特点,3左边的数据都属于3的左子树,3右边的数据都属于3的右子树。

进入递归,左子树的区间(后文称为左区间)只有一个数据。尽管只有一个数据9,我们还是先去前序中找属于左区间的第一个数据 , 由于前序的遍历特点,这个数据一定是左子树的根。9把整个左区间分为两个部分:新的左区间和新的右区间(两个都为空)

因为两个都为空,所以我们可以直接返回了。然后来看3的右区间,也就是15、20、7

我们在前序中去找这三个数字出现的第一个数字(20),即为右子树的根,20将右区间分为新的左区间(15)和新的右区间(7),重复上述逻辑即可。

总结:

用前序的根去分割中序对应的区间,只要中序被分割之后还有数据区间,就继续分割;如果中序被分割之后区间为空,则直接返回。

代码实现:

因为每次递归都要传入一个新的区间,所以不能在原函数上递归。

class Solution {
public:TreeNode* build(vector<int>& preorder, vector<int>& inorder,int& prei,int inbegin,int inend){if(inbegin>inend){return nullptr;}//inbegin和inend就是此轮递归我们要构建的区间,现在我们到这个区间中寻找前序对应的根int rooti = inbegin;while(rooti<=inend){//一定能在这个区间中找到if(inorder[rooti]==preorder[prei]){prei++;//前序往前走,便于下一轮递归找rootbreak;}else{rooti++;}}//rooti已经走到了根的位置,区间分为[inbegin,rooti-1] rooti [rooti+1,inend]TreeNode* root = new TreeNode(inorder[rooti]);root->left = build( preorder, inorder, prei,inbegin, rooti-1);root->right = build( preorder,inorder,prei,rooti+1, inend);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int prei = 0;return build(preorder, inorder,prei,0,inorder.size()-1);}
};

2. 中序+后序

106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)

                                                           

几乎是相同的逻辑。

前序是:根 左 右

后序是:左 右 根

因此,3一定是整体的根,在inorder中,3将整体分为两部分,

由后序的特点,紧邻着3的是右树,所以我们从右数开始构建(相当于倒着遍历postorder)

左边部分是9,右边部分是15,20,7,我们在右边部分找到20,20将新的右区间分为15和7........

 一样的逻辑:

class Solution {
public:TreeNode* build(vector<int>& inorder, vector<int>& postorder, int& posti,int inbegin,int inend){if(inbegin>inend){return nullptr;}int rooti = inbegin;while(rooti<=inend){if(inorder[rooti]==postorder[posti]){posti--;break;}else{rooti++;}}//找到了,分为三个区间 [inbegin,rooti-1] rooti [rooti+1,inend]TreeNode* root = new TreeNode(inorder[rooti]);root->right = build(inorder, postorder, posti,rooti+1,inend);root->left = build(inorder, postorder, posti,inbegin,rooti-1);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {int posti = postorder.size()-1;return build(inorder,postorder,posti,0,inorder.size()-1);}
};

还有就是注意在递归部分是先构建右子树,再构建左子树。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

select查询表单

select查询语法&#xff1a; select 【1】from 【2】where 【3】 1若为*表示显示全部数据列&#xff0c;若为某一列列名则只显示本列内容&#xff08;也可为多列列名&#xff09;。若在1后面加as ‘c’&#xff0c;则表示把查询的列名换成c。 2为要查询的表表名。 3为查询的…

众数信科 AI智能体智慧文旅解决方案——智能旅行助手

智慧文旅解决方案 智能旅行助手方案 利用先进的AI算法 提供个性化旅游体验的智能服务 众数信科AI智能体 产品亮点 旅游路线智能规划 旅游景点智能问答 旅行游记智能生成等 构建旅行实用指南 让旅游更加便捷、高效、智能化 关于我们 众数信科成立于2021年&#xff0c;由…

CentOS Linux教程(6)--CentOS目录

文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑)&#xff0c;然后C盘、D盘。 Linux系统的根目录是/&#xff0c;我们可以使用cd /进入根目录&#xff0c;然后使…

【mysql】case...when...、group...by、sum() 聚合函数... 企业组合使用实际场景示例

文章目录 查询需求场景预设查询结果SQL实现查询 查询需求场景 -- 统计当月不同流程类型的审批通过流程数、审批终止流程数、审批驳回流程数、新增流程数&#xff08;归档终止退回&#xff09;、申请总条目数&#xff08;关联任务单申请条目数总数&#xff09;-- 查询思路&…

蘑菇成熟待收检测系统源码分享

蘑菇成熟待收检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

最适配达梦、人大金仓的sql工具是什么?

SQLynx是一款功能强大的数据库管理工具&#xff0c;它不仅支持Oracle、MySQL等国际主流数据库&#xff0c;还很好地支持了武汉达梦、人大金仓等国产数据库。这款工具具有以下几个特点&#xff1a; 1.广泛支持&#xff1a;SQLynx支持多种数据库系统&#xff0c;包括PostgreSQL、…

ADC 位的作用

示波器的横轴表示时间基准&#xff08;秒/格或 s/p&#xff09;&#xff0c;而纵轴表示电压&#xff08;伏/格或 V/p&#xff09;。垂直精度是指示波器显示信号电压的准确程度&#xff0c;这对于视觉呈现和测量至关重要。示波器屏幕上的电压读数越接近实际信号电压&#xff0c;…

专为工程地质领域安全监测而设计,BWII型广播预警遥测系统助您实现全面监测!

专为工程地质领域安全监测而设计&#xff0c;BWII型广播预警遥测系统助您实现全面监测&#xff01; BWII型广播预警遥测系统是一款新型的雨量预警监测仪&#xff0c;具备多通道和多类型传感器接入功能。该系统能够定时采集和发送电压、电流、数字和脉冲等信息&#xff0c;同时结…

Day4-C语言高级编程

1. gcc和gdb的用法 GNU工具&#xff1a;编译工具&#xff1a;把一个源程序编译为一个可执行程序调试工具&#xff1a;能对执行程序 进行源码或汇编调试软件工程工具&#xff1a;用于协助多人开发或大型软件项目的管理&#xff0c;如make、CVS、Subvision其他工具&#xff1a;用…

Informer模型复现项目实战

加入会员社群&#xff0c;免费获取本项目数据集和代码&#xff1a;点击进入>> 1. 项目简介 A034-Informer模型复现项目实战的目标是通过复现Informer模型&#xff0c;帮助理解其在时间序列预测中的实际应用和效果。该项目基于深度学习模型Informer&#xff0c;这是一种针…

科研绘图系列:R语言连线点图(linechart dotplot)

文章目录 介绍加载R包导入数据数据预处理画图组合图形导出数据系统信息介绍 不同物种的强度和微生物的组成情况 加载R包 library("here") library("tidyverse") library("reshape2") library("vegan")

如何获取一个返回Promise<T>的函数的“T“的类型

type ThenArg<T> T extends Promise<infer U> ? U : never export type GenByStaTypeAndHfRsType ThenArg<ReturnType<typeof genByStaTypeAndHf>> 这样一来&#xff0c;虽然返回了Promise<T>&#xff0c;我们没定义T的情况下&#xff0c;也可…

揭秘大模型背后的神秘力量:算力、数据与算法的“黄金三角”

目录 揭秘大模型背后的神秘力量:算力、数据与算法的“黄金三角” 一、算力:大模型的超级引擎 二、数据:大模型的智慧源泉 三、高性能算法:大模型的智慧大脑 结语:黄金三角的共鸣 揭秘大模型背后的神秘力量:算力、数据与算法的“黄金三角” 在人工智能的浩瀚星空中,…

基于Ambari搭建hadoop生态圈+Centos7安装教程V2.0优化版(本篇博客写的较为详细,可能比较多,请耐心看)

当我们学习搭建hadoop的时候&#xff0c;未免也会遇见很多繁琐的事情&#xff0c;比如很多错误&#xff0c;需要解决。在以后公司&#xff0c;也不可能让你一个一个搭建hadoop&#xff0c;成千上万的电脑&#xff0c;你再一个个搭建&#xff0c;一个个报错&#xff0c;而且每台…

计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

苹果和香蕉联合食用,益处最大,能控制血压水平,高血压死亡风险降低 40%!

文章目录 引言苹果和香蕉有助于调节血压知识扩展引言 2024年,大连医科大学第二附属医院等多家机构的研究人员刊发在《营养学前沿》杂志的一项研究发现:高血压患者中常吃(每周吃 3~6 次)香蕉或苹果的人,全因死亡率降低 24%~40%;而当患者对两种水果摄入频率都较高(每周吃…

Ubuntu18升级cmake和python

Ubuntu18升级cmake和python 1、升级cmake至3.22.12、升级python至3.82.1 安装依赖包2.2 添加deadsnakes PPA源2.3 安装python3.82.4 将python各版本添加到update-alternatives2.5 配置python3默认指向python3.82.6 测试python3版本2.7 配置python默认指向python32.8 测试python…

从趋势到常态:TikTok定制化产品的崛起与变革

随着数字化和TikTok的发展&#xff0c;定制化产品在消费者日常生活中愈发普及&#xff0c;逐渐从一种时尚潮流转变为常态。这一转变不仅改变了消费者的购物方式&#xff0c;也重塑了市场的供需关系、产品设计理念和商业模式。本文Nox聚星将和大家探讨TikTok定制化产品的未来发展…

Windows系统及Ubuntu系统安装Java

Java语言简介 Java是一种高级编程语言&#xff0c;Java语言的创始可以追溯到1990年代初&#xff0c;当时任职于Sun Microsystems&#xff08;后来被甲骨文公司收购&#xff09;的詹姆斯高斯林&#xff08;James Gosling&#xff09;等人开始开发一种名为“Oak”(名字来源于詹姆…

大模型时代:AI引领企业创新升级的全面爆发

人工智能&#xff08;AI&#xff09;正在以惊人的速度改变企业的运营模式&#xff0c;成为企业效率提升与创新的强大驱动力。随着AI技术的不断发展&#xff0c;企业正面临前所未有的机遇与挑战&#xff0c;如何有效利用这些技术已成为决定企业未来成败的关键。 首先&#xff0c…