当前位置: 首页 > news >正文

从中序与后序遍历序列构造二叉树-力扣

  • 中序遍历序列存放节点的顺序是左中右,后序遍历存放节点的顺序是左右中
  • 后序遍历序列的最后一个节点即为二叉树的根节点
  • 由于每个值在二叉树中都是唯一的,那么根据根节点的值,就可以将中序遍历序列一分为二,前部分存储的是根节点左子树的节点,后半部分存储的是根节点右子树的节点
  • 不论中序还是后序遍历,左右子树的节点是相同的,那么就可以将两个序列划分为四个序列,中序遍历序列的左右部分,后序遍历序列的左右部分
  • 那么此时,以根节点的值构造根节点,根节点的左子节点,就可以以中序遍历序列的左部分和后序遍历序列的左部分进行构造,右子节点同理
  • 那么递归下去,就能够构造完成整棵二叉树
  • : 在实现时,对 inorderleft 等四个数组未进行初始化,规定数组的大小,此时是无法 inorderleft[i] = inorder[i]; 这样去赋值的。
/*** 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* subVec(vector<int> inorder, vector<int> postorder){if(inorder.empty() && postorder.empty()){return nullptr;}TreeNode* root = new TreeNode(postorder[postorder.size() - 1]);if(postorder.size() == 1){return root;}int flag = 0;for(flag; flag < inorder.size(); flag++){if(inorder[flag] == root->val){break;}}vector<int> inorderleft;vector<int> inorderright;vector<int> postorderleft;vector<int> postorderright;for(int i = 0; i < flag; i++){inorderleft.push_back(inorder[i]);postorderleft.push_back(postorder[i]);}for(int j = flag; j + 1 < inorder.size(); j++){inorderright.push_back(inorder[j + 1]);postorderright.push_back(postorder[j]);}root->left = subVec(inorderleft, postorderleft);root->right = subVec(inorderright, postorderright);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {TreeNode* root = subVec(inorder, postorder);return root;}
};
http://www.lryc.cn/news/369626.html

相关文章:

  • 操作系统期末复习(大题)
  • 解决富文本中抖音视频无法播放的问题——403
  • 2024最新华为OD机试(C卷+D卷)真题目录+使用说明+在线评测
  • hana 中的缓存视图功能,类似ORACLE 中的 物化视图功能
  • express入门02静态资源托管
  • Java常见的引用类型
  • 使用易备数据备份软件,简单快速地备份 Oracle 数据库
  • 基于SSM+Jsp的交通事故档案管理系统
  • 深度解析:ChatGPT全面测评——功能、性能与用户体验全景剖析
  • 领夹麦克风哪个品牌好?哪个麦克风好?揭秘无线麦克风十大排名!
  • 低代码开发:智能财务系统开发应用
  • Windows 10 找不到Microsoft Edge 浏览器
  • 【react】useState 使用指南
  • RK3588 Debian11进行源码编译安装Pyqt5
  • 二叉树的前序遍历-力扣
  • 千问Qwen7B chat:本地部署及网页端使用
  • (27)ADC接口--->(002)FPGA实现AD7606接口
  • 设计模式-设计模式分类
  • 重邮计算机网络803-(1)概述
  • 党史馆3d网上展馆
  • 小心人工智障
  • [AIGC] 自定义Spring Boot中BigDecimal的序列化方式
  • ubuntu20.04设置文件开机自启动
  • 盛水最多的容器
  • PCIe——学习计划
  • 使用 TinyEngine 低代码引擎实现三方物料集成
  • 武汉理工大学云计算与服务计算——7.容器技术习题
  • idea项目启动报错org/springframework/cloud/client/circuitbreaker/Customizer
  • 贪 吃 蛇
  • 多人中招!企业裁员前的十大征兆!