【LeetCode】剑指 Offer 07. 重建二叉树 p62 -- Java Version
题目链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/
1. 题目介绍(07. 重建二叉树)
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
【测试用例】:
示例 1:

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
【条件约束】:
0 <= 节点个数 <= 5000
2. 题解
2.1 递归

时间复杂度:O(n),空间复杂度:O(n)
但下列解法仅适用于 “无重复节点值” 的二叉树。
原因在于我们使用了HashMap来存储中序遍历的值和索引,也就默认了它的值是唯一的。
前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子树 ] 排序。
中序遍历性质: 节点按照 [ 左子树 | 根节点 | 右子树 ] 排序。
这里的递归用到了分治的思想,通过前序遍历,我们很容易就可以找到根节点,然后我们就可以拿着这个根节点的值去中序遍历中找,此时中序遍历根节点的左边就属于当前根的左子树,右边就属于当前根的右子树,以此类推…
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {// 1. 定义前序遍历索引,用于定位当前前序遍历所在的位置int preorderIndex = 0;// 2. 创建一个哈希表,用于存储中序遍历节点的位置// 后续想要查找元素,就可以将时间复杂度降为O(1)HashMap<Integer,Integer> inorderMap = new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {// 3. 循环遍历,依次将inorder元素添加到哈希表中for (int i = 0; i < inorder.length; i++){inorderMap.put(inorder[i],i);}// 8. 最后返回根节点return arrayToTree(preorder,0,preorder.length-1);}public TreeNode arrayToTree(int[] preorder,int start, int end){// 4. 递归的出口,如果左边位置移动到超过右边,表示走完了,返回空if (start > end) return null;// 5. 创建一个TreeNode对象,用来保存当前的根节点TreeNode root = new TreeNode();root.val = preorder[preorderIndex++];// 6. 递归找左子树、递归找右子树root.left = arrayToTree(preorder,start,inorderMap.get(root.val)-1); root.right = arrayToTree(preorder,inorderMap.get(root.val)+1,end);// 7. 当前递归结束,返回当前节点return root;}
}

此外还有很多其它解法,例如通过迭代加辅助栈的方法来求解,具体内容可参考[2] 重建二叉树(力扣官方题解).
3. 可参考
[1] 剑指 Offer 07. 重建二叉树(分治算法,清晰图解)
[2] 重建二叉树(力扣官方题解)
[3] 【LeetCode】No.105. Construct Binary Tree from Preorder and Inorder Traversal – Java Version (重复)
相关文章:
【LeetCode】剑指 Offer 07. 重建二叉树 p62 -- Java Version
题目链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/ 1. 题目介绍(07. 重建二叉树) 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的…...
ERROR 1114 (HY000): The table ‘tt2‘ is full
insert 操作时提示is full 问题原因 rootlocalhost 11:55:41 [t]>show table status from t like ‘tt2’ \G ; *************************** 1. row *************************** Name: tt2 Engine: MEMORY Version: 10 Row_format: Fixed Rows: 7056 Avg_row_length: 944…...
考了PMP证后工资大概是多少 ?(含pmp资料)
这个岗位的不同还有每个公司的薪资也是不一样的,具体的数字肯定是没有的,但大概的比例还是有的,据PMI调查,在获得PMP证书的人当中,在PMP认证一年后,年薪有所增长的比例为66%,上涨幅度主要集中在…...
基于国产龙芯 CPU 的气井工业网关研究与设计(一)
当前,我国气田的自动化控制程度还未完全普及,并且与世界已普及的气井站的自 动化程度也存在一定的差距。而在天然气资源相对丰富的国家,开采过程中设备研发资 金投入较大,研发周期较长,更新了一代又一代的自动化开采系…...
40/365 javascript 数据类型
1.数据类型 number类型:整数,小数都属于这一类,不具体区分 字符串:hello, "hello" 布尔类型:true,false 逻辑运算符: && || ! 比较运算符: : 类型不一致&#x…...
后勤管理系统—服务台管理功能
数图互通是一家IT类技术型软件科技公司,专业的不动产、工作场所、空间、固定资产、设备家具、设施运维及可持续性管理解决方案软件供应商。 一、后勤管理系统服务台管理功能包含: 1、专业自动化、集中管理的自助服务助理,随时响应服务请求。…...
Spring Boot 是什么,应该如何学习,有哪些优缺点
1、Spring Boot 是什么? Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用程序的开发过程,提供了一种快速、便捷、可扩展的方式来构建Spring应用程序。 Spring Boot通过自动化配置机制简化了Spring应用程序的配置过程&#x…...
使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)
这里写自定义目录标题项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参项目介绍 你好! 欢迎阅读我的文章,本章将介绍,如何使用yolov5和强化学习训练一个AI斗地主,本项目将分为三个部分,其中包含&am…...
C++ 浅谈之 AVL 树和红黑树
C 浅谈之 AVL 树和红黑树 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 C 浅谈系列,收录在专栏 C 语言中 😜😜😜 本系列阿呆将记录一些 C 语言重要的语法特性 dz…...
【Kotlin】Kotlin函数那么多,你会几个?
目录标准函数letrunwithapplyalsotakeIftakeUnlessrepeat小结作用域函数的区别作用域函数使用场景简化函数尾递归函数(tailrec)扩展函数高阶函数内联函数(inline)inlinenoinlinecrossinline匿名函数标准函数 Kotlin标准库包含几个…...
饲养员喂养动物-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)
【案例4-2】饲养员喂养动物 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例目标】 案例描述 饲养员在给动物喂食时,给不同的动物喂不同的食物,而且在每次喂食时,动物都会发出欢快的叫声。例如&…...
数据分析:消费者数据分析
数据分析:消费者数据分析 作者:AOAIYI 创作不易,如果觉得文章不错或能帮助到你学习,记得点赞收藏评论一下哦 文章目录数据分析:消费者数据分析一、前言二、数据准备三、数据预处理四、个体消费者分析五、用户消费行为总…...
Transformer论文阅读:ViT算法笔记
标题:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 会议:ICLR2021 论文地址:https://openreview.net/forum?idYicbFdNTTy 文章目录Abstract1 Introduction2 Related Work3 Method3.1 Vision Transformer3.2…...
Android基础练习解答【2】
文章目录一 填空题二 判断题三 选择题四 简答题一 填空题 1.除了开启开发者选项之外,还需打开手机上的 usb调试 开关,然后才能在手机上调试App。 2.App开发的两大技术路线包括 _原生开发_和混合开发。 3.App工程的编译…...
k8s 搭建
需求:搭建k8s 为后续自动部署做准备进程:安装至少两个ubuntu18.04系统(一个master 一到多个 node)每个系统上都要装上docker 和 kubernetes安装dockersudo su apt-get update#安装相关插件 apt-get install apt-transport-https c…...
安全运维之mysql基线检查
版本加固 选择稳定版本并及时更新、打补丁。 稳定版本:发行6-12个月以内的偶数版本。 检查方法: 使用sql语句:select version(); 检查结果: 存在问题:当前数据库版本较老需要更新 解决方案:前往http://www.mysql…...
跨境电商卖家敦煌、雅虎、乐天、亚马逊测评自养号的重要性!
作为亚马逊、敦煌、乐天、雅虎等跨境的卖家,这两年以来,面对流量越来越贵的现实,卖家需要更加珍惜每次访问listing页面的流量,把转化做好,把流量尽可能转化为更多的订单。 提升转化率的技巧 提升产品转化率࿰…...
Python 之 Matplotlib xticks 的再次说明、图形样式和子图
文章目录一. 改变 x 轴显示内容 xticks 方法再次说明1. x 轴是数值型数据2. 将 x 轴更改为字符串3. 总结二. 其他元素可视性1. 显示网格:plt.grid()2. plt.gca( ) 对坐标轴的操作三. plt.rcParams 设置画图的分辨率,大小等信息四. 图表的样式参数设置1. …...
3.InfluxDB WEB使用
结合telegraf做指标数据收集 点击 Load Data -> Telegraf 配置界面 influxDB支持在WEB-UI中生成配置文件 然后利用telegraf通过远程URL请求的方式进行获取 点击CREATE CONFIGURATION 创建telegraf配置文件 选择Bucket InfluxDB提供了很多配置好的监控模板供用户选择 可以…...
git冲突合并
一、版本说明 dev:本地仓库中的dev分支 master:本地仓库中的master分支 remotes/origin/master和origin/master:都是远程仓库上的master分支 二、一个解决冲突的常规流程 1、前提条件:不能在master分支上修改任何文件。master分支…...
3步告别微信单向好友:WechatRealFriends帮你轻松识别谁删了你
3步告别微信单向好友:WechatRealFriends帮你轻松识别谁删了你 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFrie…...
别再瞎猜了!YOLOv8 模型缩放(width_multiple)与通道计算(c1,c2)的完整逻辑
YOLOv8模型通道计算与宽度系数的工程化实践指南 在移动端部署YOLOv8模型时,许多工程师会遇到一个典型困境:明明按照官方文档调整了width_multiple参数,却发现模型要么计算量超出预期,要么精度断崖式下跌。这背后其实隐藏着YOLOv8通…...
AI性能测试:TPS之外还要关注什么?
在AI驱动的时代,性能测试已成为软件测试从业者的核心技能。传统软件测试中,TPS(Transactions Per Second,每秒事务处理量)常被视为黄金指标,用于衡量系统的吞吐能力。然而,AI系统因其独特的计算…...
Java 四种安全加载 P12 证书的方案
文章目录从文件绝对路径加载【最常用、最稳定】从 resources 目录加载从 byte [] 字节数组加载从 Base64 字符串加载如果文章对您有用,请关注点赞加收藏,博主会持续更新相关的专栏笔记🫡 从文件绝对路径加载【最常用、最稳定】 适合…...
02.Linux常用文件操作命令
1.mkdir 目录名:创建目录 mkdir 目录名 mkdir -p a/b/c 创建多级目录 2.touch 创建空文件 touch 文件名 touch 文件名 文件名 创建多个文件 3.文件写入内容 echo写入 覆盖写入 echo 文件内容 >文件名 追加写入(日志必用) echo 文件内容 >…...
从外卖配送看算法实战:Python+NetworkX解决简化版VRP问题
外卖配送路径优化实战:用PythonNetworkX解决简化版VRP问题 中午12点,城市里的外卖订单如潮水般涌来。配送员小张的手机上瞬间出现了8个不同方向的订单,他盯着地图上分散的标记点皱起了眉头——怎样才能用最短的时间送完所有外卖?这…...
好用还专业!高效论文写作全流程AI论文网站推荐(2026 最新)
论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节,以下工具按环节精准匹配,兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求,覆盖免费/付费、通用/垂直场景。2026年AI论…...
图床项目(二) 接口设计
接口设计 1 . muduo 网络模型 该模型相较于普通的reactor模型复杂一点,其中包括mainReactor 和 多个 subReactor ,其中每一个 subReactor对应一个线程。 其中 mainReactor 负责处理新连接 , 并将连接均匀分配给 subReactor ,后续…...
STC15W4K32S4寄存器操作避坑指南:为什么你的PWM输出异常?(附完整初始化流程图)
STC15W4K32S4寄存器操作避坑指南:为什么你的PWM输出异常? 最近在调试STC15W4K32S4的PWM功能时,发现不少开发者都会遇到一些共性问题:明明按照手册配置了寄存器,PWM输出就是不稳定或者干脆没有波形。这些问题往往源于几…...
Chatbot Arena排行榜单实战指南:从数据采集到模型优化
Chatbot Arena排行榜单实战指南:从数据采集到模型优化 在构建和优化自己的对话AI时,我们常常面临一个核心问题:如何客观、全面地评估它的性能?闭门造车式的测试往往带有主观偏见,而Chatbot Arena这类公开的排行榜单&a…...
