leetcode106. 从中序与后序遍历序列构造二叉树

在这里插入图片描述

一:题目

在这里插入图片描述
在这里插入图片描述

二:思路

在这里插入图片描述
例子:中序[9,3,15,20,7];后序[9,15,7,20,3]
1.我们先选取后续的最后的结点3(其是根节点)
2.我们在中序序列中用上一步求出的根节点3并记录其在中序数组中的位置rootin,然后我们就可以
求出 左子树的结点个数(rootin - leftin),同时右子树我们也可以找到范围
3.根据我们求出的左子树的结点个数,我们可以确定后序遍历序列中的(我们左右子树的范围)
4.接下来我们通过递归 继续根据新的数组范围 在后序序列中求出根节点,然后再在中序序列
中重新划分(左右子树)
//递归建造二叉树的左子树(所以我们需要中序中左子树的范围,后序中左子树的范围)
root->left = makeTree(中序左子树范围,后序左子树范围,中序序列,后序序列)
root->right = makeTree(中序右子树范围,后序右子树范围,中序序列,后序序列)

三:上码

/*** Definition for a binary tree node.* 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:/**思路:例子:中序[9,3,15,20,7];后序[9,15,7,20,3]1.我们先选取后续的最后的结点3(其是根节点)2.我们在中序序列中用上一步求出的根节点3并记录其在中序数组中的位置rootin,然后我们就可以求出 左子树的结点个数(rootin - leftin),同时右子树我们也可以找到范围3.根据我们求出的左子树的结点个数,我们可以确定后序遍历序列中的(我们左右子树的范围)4.接下来我们通过递归 继续根据新的数组范围 在后序序列中求出根节点,然后再在中序序列中重新划分(左右子树)//递归建造二叉树的左子树(所以我们需要中序中左子树的范围,后序中左子树的范围)root->left = makeTree(中序左子树范围,后序左子树范围,中序序列,后序序列)  root->right = makeTree(中序右子树范围,后序右子树范围,中序序列,后序序列)  */TreeNode* makeTree(int leftin,int rightin,int leftpost,int rightpost,vector<int>&in,vector<int>&post) {if(leftin > rightin) return NULL;TreeNode* root = new TreeNode(post[rightpost]);int rootin = leftin;//求出中序序列中  根节点的下标while(rootin <= rightin && in[rootin] != post[rightpost]) rootin++;int leftTreeNums = rootin-leftin;//求出左子树中结点的个数 //rootin-1(rootin表示的是根节点的下标了 所以我们要刨去根节点)//leftpost+leftTreeNums-1同理 root->left = makeTree(leftin,rootin-1,leftpost,leftpost+leftTreeNums-1,in,post);root->right = makeTree(rootin+1,rightin,leftpost+leftTreeNums,rightpost-1,in,post);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {TreeNode* root = makeTree(0,inorder.size()-1,0,postorder.size()-1,inorder,postorder);return root;}
};

在这里插入图片描述

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

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

相关文章

「offer来了」快来关注这些性能优化问题

「面试专栏」前端面试之性能优化篇&#x1f4ac;序言&#x1f4af;思维导图抢先看&#x1f441;️‍&#x1f5e8;️一、html、css、js、jq优化1、针对HTML&#xff0c;如何优化性能&#xff1f;2、针对CSS&#xff0c;如何优化性能&#xff1f;3、哪些方法能提升移动端CSS3动画…

不宜过分炒作第三代半导体材料弯道超车

目前&#xff0c;本土晶圆大厂与台积电在技术水平上的差距是非常明显的。就市场份额来说&#xff0c;台积电的市场份额超过50%&#xff0c;而本土晶圆大厂的市场份额大约是台积电的十分之一。在技术水平上&#xff0c;本土晶圆大厂也和台积电这样的大厂有一定差距。目前台积电7…

「offer来了」浅谈前端面试中开发环境常考知识点

「面试专栏」前端面试之开发环境篇&#x1f331;序言&#x1f332;一、git1、为什么要使用git?2、常用的git命令3、git提交规范&#x1f333; 二、Chrome调试工具&#x1f334;三、抓包1、抓包工具2、抓包过程&#x1f33e;四、linux 常用命令1、为什么要用linux&#xff1f;2…

数据结构与算法专题——第十题 输入法跳不过的坎-伸展树

我们知道AVL树为了保持严格的平衡&#xff0c;所以在数据插入上会呈现过多的旋转&#xff0c;影响了插入和删除的性能&#xff0c;此时AVL的一个变种伸展树&#xff08;Splay&#xff09;就应运而生了&#xff0c;我们知道万事万物都遵循一个“八二原则“&#xff0c;也就是说8…

「软件项目管理」一文详解软件项目成本计划

软件项目成本计划序言一、成本估算的定义二、估算的基本概念1、关于估算2、软件项目规模3、软件规模单位4、软件项目成本5、成本单位6、软件规模和软件成本的关系7、成本估算结果三、成本估算过程1、估算输入2、估算处理3、估算输出四、成本估算方法1、代码行估算法&#xff08…

在腾讯云云函数计算上部署.NET Core 3.1

云厂商&#xff08;腾讯云、Azure等&#xff09;提供了Serverless服务&#xff0c;借助于Serverless&#xff0c;开发人员可以更加专注于代码的开发&#xff0c;减少运维的成本。腾讯云的函数计算提供了很多运行库&#xff0c;对.NET的支持需要通过custom runtime 来支持&#…

MassTransit Get Started-

MassTransit&#xff1a;是一款.NET的分布式应用程序框架&#xff08;开源、免费&#xff09;。通过MassTransit&#xff0c;可以轻松创建利用基于消息的、松耦合异步通信的应用程序和服务&#xff0c;以提高可用性&#xff0c;可靠性和可伸缩性。MassTransit本身定位轻量级的服…

「软件项目管理」成本估算模型——Walston-Felix模型和COCOMO Ⅱ模型

Walston-Felix模型和COCOMO Ⅱ模型序言一、Walston-Felix模型1. 公式2. 举例二、COCOMO模型&#xff08;Constructive Cost Model&#xff09;1. 模型定义2. COCOMO模型的发展3. COCOMO基本原理三、COCOMO 811. 模型级别2. 项目类型3. 基本COCOMO-81&#xff08;1&#xff09;公…

图书管理(SSM)

一:前言 这仅仅是个小demo,体验了一把SSM配置地狱&#xff0c;就简单的实现CRUD 二:相关技术 MybatisSpringSpringMVCMysqlMavenTomcat 三:功能展示 1:查询 2:增加 3:删除 4&#xff1a;修改 四:上码 1&#xff1a;导入依赖 <?xml version"1.0" encoding&…

ASP.NET Core Cookie SameSite

在较多的项目中&#xff0c;Cookie 是比较常用的一种状态保持的选择。比如常见的例子&#xff1a;用户登录成功后&#xff0c;服务器通过 set-cookie 将会话Id设置到当前域下&#xff0c;前端在调用后端接口时&#xff0c;会自动将同域下的 Cookie 携带上&#xff0c;然后后端接…

还不会ts?一文带你打开ts的大门

一文带你打开ts的大门序言一、什么是TypeScript&#xff1f;1、编程语言的类型2、TypeScript究竟是什么&#xff1f;二、为什么要学习TypeScript&#xff1f;1、程序更容易理解2、效率更高3、更少的错误4、非常好的包容性5、一点小缺点三、typescript入门1、如何安装TypeScript…

idea中右侧的Maven框消失了

我掉 芭比Q了 idea中右侧的maven框居然没了 消失不见了 跟一束烟似的 没了 解决&#xff08;网上找的&#xff09;

「软件项目管理」一文详解软件项目进度计划

软件项目进度计划序言一、进度及任务的定义1. 进度2. 任务3. 产品和任务的关系二、任务关联关系1. 定义2. 任务(活动)之间的关系3. 任务关系矩阵4. 任务关联关系的依据三、进度管理图示1. 甘特图2. 网络图&#xff08;1&#xff09;定义&#xff08;2&#xff09;常用的网络图Ⅰ…

过年烟花特效

一&#xff1a;前言 过年了 菜鸡杰 在这给CSDN的伙计们拜年了 这一段时间以来 我特别感谢 我的粉丝 正是因为有你们的陪伴 所以我才会很大动力 去写博客&#xff0c;所以我就准备了一个特效给粉丝们 现在过年不让放烟花 我就改了个代码 改成烟花特效 送给大家 二:特效描述 这…

「软件项目管理」一文详解软件项目质量计划

一文详解软件项目质量计划&#x1f3a9;前言&#x1f452;一、质量概述1. 质量与软件质量2. 质量成本二、质量模型1. 定义2. 几种模型3. 模型解读&#xff08;1&#xff09;Bohem质量模型&#xff08;2&#xff09;McCall质量模型&#xff08;3&#xff09;ISO/IEC 9126质量模型…

WSL2 支持挂载物理磁盘,Windows 可直接访问 ext4

喜欢就关注我们吧&#xff01;最新的 Windows Insiders Preview Build 为 WSL2 的命令行程序增加了新功能&#xff1a;wsl --mount&#xff0c;这个新参数支持在 WSL2 添加和挂载物理磁盘&#xff0c;用户通过它能访问 Windows 没有原生支持的 Linux 文件系统&#xff08;例如 …

2招解决并发问题,省几百万设备费用!说穿了很简单...

经大佬介绍&#xff0c;接了个技术顾问的私活儿&#xff0c;3天搞定报酬8000&#xff0c;Mark一下&#xff0c;也分享下经验心得。&#xff08;经大家要求&#xff0c;文末增加了一段接私活儿经验&#xff09;背景交代甲方是广东某国企信息部&#xff0c;美其名曰是邀请技术顾问…

「软件项目管理」一文详解软件配置管理计划

一文详解软件配置管理计划前言一、配置管理概述1. 配置管理(SCM)定义2. 软件配置项目(SCI)3. 基线4. 软件配置控制委员会&#xff08;SCCB&#xff09;二、软件配置管理过程1. 管理过程2. 管理过程解析&#xff08;1&#xff09;配置项标识、跟踪I. 定义II. SPM项目要求&#x…

Kubernetes探针踩坑记

1. 荒腔走板最近一两个月生产K8s集群频繁出现短时503 Service Temporarily Unavailable&#xff0c;还不能主动复现&#xff0c;相当郁闷&#xff0c;压力山大。HTTP 5xx响应状态码用于定义服务端错误。500 Internal Server Error&#xff1a;所请求的服务器遇到意外的情况并阻…

「软件项目管理」一文了解软件项目团队计划

一文了解软件项目团队计划序言一、人力资源计划1. 团队定义2. 项目组织结构&#xff08;1&#xff09;职能型&#xff08;2&#xff09;项目型&#xff08;3&#xff09;矩阵型3. 责任分配矩阵二、项目干系人计划1. 干系人定义2. 干系人识别3. 干系人参与分类4. 干系人参与评估…