/**
* 106. 从中序与后序遍历序列构造二叉树
* @author wsq
* @date 2020/09/25
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal
*/
package notsubmit;
public class MidPosBuildTree {
/**
* 根据后序遍历与中序遍历的特点
* 采用递归的方式构建二叉树
* 以后会尝试使用迭代的方式实现树的构建
* @param inorder
* @param postorder
* @return
*/
public TreeNode buildTree(int[] inorder, int[] postorder) {
int inLen = inorder.length;
int posLen = postorder.length;
if(inLen == 0 || posLen == 0 || inLen != posLen) {
return null;
}
// 递归建树
TreeNode root = reBuildTree(inorder, postorder, 0, inLen - 1, 0, posLen - 1);
return root;
}
private TreeNode reBuildTree(int[] inorder, int[] postorder,
int inStart, int inEnd,
int postStart, int postEnd) {
// TODO Auto-generated method stub
if(inStart > inEnd || postStart > postEnd) {
return null;
}
int rootVal = postorder[postEnd];
TreeNode rootNode = new TreeNode(postorder[postEnd]);
if(postStart == postEnd) {
return rootNode;
}
int inPos = findInorder(inorder, inStart, inEnd, rootVal);
int leftTreeNum = inPos - inStart;
rootNode.left = reBuildTree(inorder, postorder, inStart, inPos - 1, postStart, postStart + leftTreeNum - 1);
rootNode.right = reBuildTree(inorder, postorder, inPos + 1, inEnd, postStart + leftTreeNum, postEnd - 1);
return rootNode;
}
private int findInorder(int[] inorder, int inStart, int inEnd, int rootVal) {
// TODO Auto-generated method stub
for(int i = inStart; i <= inEnd; ++i) {
if(inorder[i] == rootVal) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] inorder = {2, 1};
int[] postorder = {2, 1};
MidPosBuildTree bt = new MidPosBuildTree();
TreeNode head = bt.buildTree(inorder, postorder);
}
}
相关推荐
获取B站某用户更多的关注数和粉丝数
获取B站某用户更多的关注数和粉丝数 相关记录 一、 前言 B 站最多只能翻 5 页用户的关注数和粉丝数,如何能够看到更多呢。 方法我也是从网上翻来的,记载博客里,算是我研究过这个话题了。 二、需要的东西 关注数的 api https://api.bilibili.com/x/relation/followings?vmid=2884629&pn=1&ps=20&order=desc&jsonp=jsonp 关注者(粉丝)的 api https://api.bilibili.
从中序与后序遍历序列构造二叉树(递归法+模拟)
题目: 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 题解: 已知中序,后序,即可唯一确定一棵二叉树,关键点抓住后序的第一个元素是当前根节点,因而我们可以将序列进行切割,递归到只有一个元素时,构造节点。 具体解释贴在代码里 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;
DAC60501与STM32的I2C通信实战:从寄存器配置到电压输出
本文详细介绍了如何使用STM32通过I2C通信驱动DAC60501数模转换器,实现精确的模拟电压输出。内容涵盖从硬件连接到软件模拟I2C驱动编写,再到DAC寄存器配置与电压计算的全流程实战指南,并提供了关键的驱动实例代码和常见问题调试技巧,帮助开发者快速掌握这一嵌入式开发中的实用技能。
前(后)序+中序遍历序列构建二叉树——递归方法分析及实现
问题来源 https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/。 从前序和中序遍历序列构建二叉树(递归解法) 假定树中没有重复元素。 对于任意一颗树而言,前序遍历的形式总是 [ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ] 即根节点总是前序遍历中的第一个节点。 而中序遍历的形式总是 [ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]
Open3D 教程学习指南 (持续整理)
Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如点云处理、3D 重建、几何处理和可视化等。
人工势场法在自动驾驶避障中的实践与优化
本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。
2021-10-21 106. 从中序与后序遍历序列构造二叉树(递归)
注: 题目: 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出: 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 题解: 思路 首先解决这道题我们需要明确给定一棵二叉树,我们是如何对其进行中序遍历与后序遍历的: 中序遍历的顺序是每次遍历左孩子,再遍历根节点,最后遍历右孩子。 后序遍历的顺序
中国传媒大学计算机考研初复试经验贴
中传的计算机专业考研的话主要分为两大学院:计网学院和国重,大部分专业在计网学院。
从中序与后序遍历序列构造二叉树(递归实现)
题目 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 注意点 1、递归思路 根据后序遍历确定根节点;(最后一个) 然后根据中序遍历确定左子树和右子树; 循环以上步骤。 参考:从前序与中序遍历序列构造二叉树(递归实现) 实现 /** * Definition for a binary tree node. * pu
ArcGIS栅格数据像元值与坐标值提取及Excel导出全流程解析
本文详细解析了使用ArcGIS将栅格数据批量提取像元值与坐标值并导出至Excel的全流程。通过“栅格转点”、“添加XY坐标”和“表转Excel”三大核心步骤,无需编程即可自动化处理遥感、环境等领域的空间数据,有效提升数据分析效率。
广东电信兆能Z82盒子救砖记:手把手教你用U盘强刷HI3798MV100固件(附短接图)
本文详细介绍了广东电信兆能Z82盒子变砖后的救砖方法,重点讲解了使用U盘强刷HI3798MV100固件的全流程,包括诊断、准备工作、短接操作及刷机后的优化设置。特别针对m8233主板和8188无线方案的机型,提供了实用的短接图和操作技巧,帮助用户成功恢复设备。
从中序和后序遍历构造二叉树(递归)
题目描述 给出一棵树的中序遍历和后序遍历,请构造这颗二叉树 注意: 保证给出的树中不存在重复的节点 思路 思路很容易想,但是能不能顺利写出代码来又是另外一回事。 我使用了开区间 后序遍历的左右子树的区分应该由中序遍历得到的左子树长度来固定,而不是由中序遍历左子树的下标。 /** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution
EB配置I2c - 实现与PF8200的读写操作
①,基于硬件实现IIC通信(硬件GPIO引脚配置为I2c复用引脚)②,基于软件模拟IO实现IIC通信(代码控制SDA和SCL两个IO引脚的电平来模拟IIC时序)本文章基于64pin的恩智浦S32K146型号的芯片作为主机,从机是NXP的供电芯片。在本次实验中,我们将以使用EB工具链来配置硬件IIC通信。1,EB配置2,代码编写3,测试验证话不多说,走你~写操作比较简单,只需要申明一个I2c配置结构体变量即可。
★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树
★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
leetcode106. 从中序与后序遍历序列构造二叉树/递归
文章目录题目:106. 从中序与后序遍历序列构造二叉树基本思想:递归构建 题目:106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如: 给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 来源:力扣(LeetCode) 链接:https://leetcod
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
[Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
【问题描述】[中等] 【解答思路】 public class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { int inLen = inorder.length; int postLen = postorder.length; // 特判 if (inLen != postLen) { throw new R
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
【LeetCode】105. 从前序与中序遍历序列构造二叉树,106. 从中序与后序遍历序列构造二叉树,144. 二叉树的前序遍历非递归实现,94. 二叉树的中序遍历非递归实现,145. 二叉树的后序
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的。给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的。给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。给你二叉树的根节点 root ,返回它节点值的 前序 遍历。,请构造二叉树并返回其根节点。
106从中序与后序遍历序列构造二叉树(递归)
1、题目描述 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 2、示例 中序遍历 inorder =[9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 3、题解 基本思想:递归,不断以根节点拆分出左子树的后序中...
leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法
如题: 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder =[9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 这道题明显是有套路的,如果你还不会,说明你是第一次遇到,还好现在...
105从前序与中序遍历序列构造二叉树 && 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。
递归+二叉树的前中后序遍历转换 105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 解题 递归得到每个子节点,返回节点; 注意点 右子树的节点为getnode(preorder,inorder,i+t-start+1,t+1,end);
【递归】106. 从中序与后序遍历序列构造二叉树
【递归】106. 从中序与后序遍历序列构造二叉树
LeetCode·106.从中序与后序遍历序列构造二叉树·递归
递归
Leetcode 106. 从中序与后序遍历序列构造二叉树 递归
根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder =[9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 递归求解 /** * Definition for a bi...
【LeetCode】106. 从中序与后序遍历序列构造二叉树(递归、二叉树、中序后序建二叉树)
经典二叉树问题,建议搭配前序中序建树一起看,附带链接:105. 从前序与中序遍历序列构造二叉树 题目 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 中序后序唯一确定一棵二叉树 和105题类似,建议先看看105题的解法,下面我会直接给出代码 先看看中序遍历和后序遍历: 中序遍历:左右根 后序遍历:左右根 时
中序与后序遍历序列构造二叉树(Lc106)——递归
中序与后序遍历序列构造二叉树(Lc106)——递归
4824



被折叠的 条评论
为什么被折叠?



