​LeetCode解法汇总106. 从中序与后序遍历序列构造二叉树

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

示例 1:

输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

示例 2:

输入:inorder = [-1], postorder = [-1]
输出:[-1]

提示:

  • 1 <= inorder.length <= 3000
  • postorder.length == inorder.length
  • -3000 <= inorder[i], postorder[i] <= 3000
  • inorder 和 postorder 都由 不同 的值组成
  • postorder 中每一个值都在 inorder 中
  • inorder 保证是树的中序遍历
  • postorder 保证是树的后序遍历

解题思路:

1.和105题差不多,只不过后序遍历的最后一个数字,一定是根节点。中序遍历中找到这个根节点,就可以分成左右两份,分别对应左子树和右子树。

2.所以我们使用和105题一样的策略,唯一要改的就是传入的区间范围。

代码:

/*** 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 *buildTree(vector<int> &inorder, vector<int> &postorder){vector<int> indexMap(6000);for (int i = 0; i < inorder.size(); i++){indexMap[inorder[i] + 3000] = i;}TreeNode *node = buildNode(indexMap, postorder, inorder, 0, postorder.size() - 1, 0, inorder.size() - 1);return node;}TreeNode *buildNode(vector<int> &indexMap, vector<int> &postorder, vector<int> &inorder, int postStart, int postEnd, int inStart, int inEnd){int expectValue = postorder[postEnd];int index = indexMap[expectValue+3000];int leftLength = index - inStart;int rightLength = inEnd - index;TreeNode *root = new TreeNode(expectValue);if (leftLength >= 1){root->left = buildNode(indexMap, postorder, inorder, postStart, postStart + leftLength - 1, inStart, index - 1);}if (rightLength >= 1){root->right = buildNode(indexMap, postorder, inorder, postEnd - rightLength, postEnd - 1, index + 1, inEnd);}return root;}
};

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

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

相关文章

【python】python入门之条件判断及某些报错的含义

目录 示例 细节报错​编辑 判断符号 嵌套判断 示例 mood int(input()) if mood > 60:print("happy!!") else:print("just so so") 通过示例看出&#xff0c;python的写法和c的区别不是很大&#xff0c;if和else都作为条件判断的函数来使用&…

华为OD机试真题C卷-篇4

200分值题 可以处理的最大任务员工派遣快递员的烦恼符号运算伐木工反射计数分披萨推荐多样性贪心的歌手螺旋数组矩阵(100) 可以处理的最大任务 有一个tasks任务列表&#xff0c;需要处理其中的任务&#xff1b;tasks[i] [si, ei]&#xff0c;该任务可以在si<day<ei之间…

【PX4SimulinkGazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化

在Simulink中使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化 系统架构Matlab官方例程Control a Simulated UAV Using ROS 2 and PX4 Bridge运行所需的环境配置PX4&Simulink&Gazebo联合仿真实现方法建立Simulink模型并完成基本配置整体框架各子系统实现原理…

mp4转换成mp3,三种方法教你提取视频中的音乐

在日常生活中&#xff0c;我们经常会遇到想要从某个MP4视频中提取出背景音乐或对话的情况。将视频转换为MP3格式&#xff0c;不仅方便我们在各种设备上播放&#xff0c;还能节省存储空间。然而&#xff0c;对于不熟悉视频处理的人来说&#xff0c;这可能是一个挑战。 幸运的是…

深入解析SDRAM:从工作原理到实际应用

深入解析SDRAM&#xff1a;从工作原理到实际应用 在众多内存技术中&#xff0c;同步动态随机访问存储器&#xff08;SDRAM&#xff09;因其出色的性能和广泛的应用而备受关注。本文将从SDRAM的工作原理入手&#xff0c;探讨其性能优化策略和在现代电子设备中的应用。 SDRAM工作…

【码银送书第十二期】世界顶级名校计算机专业,都在用哪些书当教材?

清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么&#xff1f;今天我们来盘点一下那些世界名校计算机专业采用的教材。 01《深入理解计算机系统》 &#xff08;原书第3版&#xff09; 作者&#xff1a;兰德尔 E.布莱恩特 大卫 R. 奥哈拉伦 推荐理由&#xff1a;卡内基…

小果金融数据库程序---支持第三方库,提供程序

我这几天把程序打包了程序完全支持第三方库调用服务器数据&#xff0c;我简单的写了一些例子api&#xff0c;可以完全利用代码调用数据 点击数据界面的结果 随便点击一个数据 或到的数据 可以在文件夹下面的数据看到&#xff0c;自动下载 比如点击可转债热度 数据表自动下载 强…

阿里巴巴中国站获得淘口令真实url API(1688.item_password)

阿里巴巴&#xff08;1688.com&#xff09;是一个B2B电商平台&#xff0c;而淘口令&#xff08;或称为淘宝口令&#xff09;是一种在阿里巴巴集团旗下的淘宝和天猫平台中分享商品或活动链接的特殊形式。淘口令通常包含一串字符&#xff0c;用户可以复制这串字符并在淘宝或天猫的…

2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;…

怎么做微信拼团_重塑社交购物新体验

微信拼团&#xff0c;重塑社交购物新体验 在当今社会&#xff0c;随着互联网的深入发展&#xff0c;人们的购物方式也在发生翻天覆地的变化。从最初的实体店购物&#xff0c;到后来的电商平台购物&#xff0c;再到现在的社交电商&#xff0c;每一次变革都为我们带来了前所未有…

Sora原理浅析

1 今日热点 DiT 1.1 热榜 前两天扫下 github 热榜前 5&#xff0c;都是 python 项目&#xff0c;基本都与大模型相关。 其中 DIT 是官方的 Pytorch 版 Diffusion Transformer 模型&#xff0c;这是两年前的一个项目&#xff0c;来自 facebookresearch&#xff0c;可能是因为这…

电路设计(25)——4位数字频率计的multism仿真及PCB设计

1.设计要求 使用4位数码管&#xff0c;显示输入信号的频率。完成功能仿真后&#xff0c;用AD软件&#xff0c;画出原理图以及PCB。 2.电路设计 输入信号的参数为&#xff1a; 可见&#xff0c;输入为168HZ&#xff0c;测量值为170HZ&#xff0c;误差在可接受的范围内。 3.PCB设…