二叉树进阶学习——从中序和后续遍历序列构建二叉树

embedded/2024/10/19 6:08:34/

1.题目解析

题目来源:106.从中序和后序遍历序列构造二叉树 

测试用例

2.算法原理 

后序遍历:按照左子树->右子树->根节点的顺序遍历二叉树,也就是说最末尾的节点是最上面的根节点

中序遍历:按照左子树->根节点->右子树的顺序遍历二叉树 

题目要求按照给出的后序序列与中序序列创建二叉树,跟之前的按照前序与中序序列创建二叉树异曲同工,不同的是后序序列需要从末尾开始取出根节点将中序序列分为三个区间,然后要求先构建右子树再构建左子树,而前序则是先构建左子树再构建右子树 

3.实战代码

/*** 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:TreeNode* build(vector<int>& inorder, vector<int>& postorder,int& posti,int inbegin,int inend){//处理叶子结点if(inbegin > inend){return nullptr;}//根据后序确定根节点TreeNode* root = new TreeNode(postorder[posti]);//将中序序列分为三个区间//左子树 根节点 右子树int rooti = inbegin;while(inbegin <= inend){if(inorder[rooti] == postorder[posti]){break;}rooti++;}//后序由后向前遍历posti--;//后序需要先构建右子树再构建左子树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 i = postorder.size() - 1;return build(inorder,postorder,i,0,inorder.size() - 1);}
};

 


http://www.ppmy.cn/embedded/123662.html

相关文章

【数据分享】2000—2023年我国省市县三级逐年植被覆盖度(FVC)数据(Shp/Excel格式)

之前我们分享过2000—2023年逐月植被覆盖度&#xff08;FVC&#xff09;栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;和Excel和Shp格式的省市县三级逐月FVC数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;原始的逐月栅格数据来源于高吉喜学者…

AI大语言模型进阶应用及模型优化、本地化部署、从0-1搭建、智能体构建技术

在过去几年中&#xff0c;人工智能领域的发展迅猛&#xff0c;尤其是大语言模型的应用&#xff0c;为各行各业带来了前所未有的创新与突破。从ChatGPT-3.5的推出到GPT Store的上线&#xff0c;再到最新的多模态交互ChatGPT-4o&#xff0c;OpenAI不断引领科技潮流&#xff0c;推…

c# 线性回归和多项式拟合

1. 线性回归 公式&#xff1a; 线性回归的目标是拟合一条直线&#xff0c;形式为&#xff1a; ymxbymxb 其中&#xff1a; yy 是因变量&#xff08;目标值&#xff09;xx 是自变量&#xff08;特征值&#xff09;mm 是斜率&#xff08;slope&#xff09;bb 是截距&#xff08…

【PyCharm】Ubuntu20.04 卸载 PyCharm 并安装激活 Professional

【PyCharm】Ubuntu20.04 卸载 PyCharm 并安装激活 Professional 1 卸载2 安装激活 1 卸载 参考文档: Link 删除安装目录 删掉之前压缩包解压出来的目录&#xff0c;例如&#xff1a;我之前是放在家目录下 rm -rf ~/pycharm-community-2023.2.1删除配置文件 rm -rf ~/.config…

My_qsort() -自己写的 qsort 函数

2024 - 10 - 05 - 笔记 - 21 作者(Author)&#xff1a;郑龙浩 / 仟濹(网名) My_qsort()- 自己写的qsort函数 My_qsort为自己写的qsort函数&#xff0c;但是采用的不是快速排序&#xff0c;而是冒泡排序&#xff0c;是为了模仿qsort函数而尝试写出来的函数。 思路&#xff1a…

基于SPI协议的Flash扇区擦除实验

当一块Flash芯片中的不同的扇区烧录了不同的程序&#xff0c;而我们只想擦除某个扇区的程序保留其他程序时&#xff0c;Flash的全擦除是不能满足要求的&#xff0c;这时候就需要扇区擦除来实现这一功能。扇区擦除可以对Flash芯片中的某一扇区进行擦除而不改变其他扇区中的存储数…

数学建模 第四讲 - 数学规划模型

在数学建模的学习过程中&#xff0c;第四章介绍了几种常见的数学规划模型&#xff0c;这些模型在实际问题中有着广泛的应用。以下是对这些模型的整理和总结。 4.1 奶制品的生产与销售 问题描述 考虑一个奶制品厂&#xff0c;需要根据外部需求和内部条件&#xff08;如设备、…

【STM32单片机_(HAL库)】4-2-1【定时器TIM】定时器输出PWM实现呼吸灯实验

1.硬件 STM32单片机最小系统LED灯模块 2.软件 pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "pwm.h"int main(void) {HA…