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

【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

题目链接&#xff1a;https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/ 1. 题目介绍&#xff08;07. 重建二叉树&#xff09; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的…...

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资料)

这个岗位的不同还有每个公司的薪资也是不一样的&#xff0c;具体的数字肯定是没有的&#xff0c;但大概的比例还是有的&#xff0c;据PMI调查&#xff0c;在获得PMP证书的人当中&#xff0c;在PMP认证一年后&#xff0c;年薪有所增长的比例为66%&#xff0c;上涨幅度主要集中在…...

基于国产龙芯 CPU 的气井工业网关研究与设计(一)

当前&#xff0c;我国气田的自动化控制程度还未完全普及&#xff0c;并且与世界已普及的气井站的自 动化程度也存在一定的差距。而在天然气资源相对丰富的国家&#xff0c;开采过程中设备研发资 金投入较大&#xff0c;研发周期较长&#xff0c;更新了一代又一代的自动化开采系…...

40/365 javascript 数据类型

1.数据类型 number类型&#xff1a;整数&#xff0c;小数都属于这一类&#xff0c;不具体区分 字符串&#xff1a;hello, "hello" 布尔类型&#xff1a;true,false 逻辑运算符&#xff1a; && || ! 比较运算符&#xff1a; : 类型不一致&#x…...

后勤管理系统—服务台管理功能

数图互通是一家IT类技术型软件科技公司&#xff0c;专业的不动产、工作场所、空间、固定资产、设备家具、设施运维及可持续性管理解决方案软件供应商。 一、后勤管理系统服务台管理功能包含&#xff1a; 1、专业自动化、集中管理的自助服务助理&#xff0c;随时响应服务请求。…...

Spring Boot 是什么,应该如何学习,有哪些优缺点

1、Spring Boot 是什么&#xff1f; Spring Boot是一个基于Spring框架的开源项目&#xff0c;它简化了Spring应用程序的开发过程&#xff0c;提供了一种快速、便捷、可扩展的方式来构建Spring应用程序。 Spring Boot通过自动化配置机制简化了Spring应用程序的配置过程&#x…...

使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)

这里写自定义目录标题项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参项目介绍 你好&#xff01; 欢迎阅读我的文章&#xff0c;本章将介绍&#xff0c;如何使用yolov5和强化学习训练一个AI斗地主&#xff0c;本项目将分为三个部分&#xff0c;其中包含&am…...

C++ 浅谈之 AVL 树和红黑树

C 浅谈之 AVL 树和红黑树 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是 C 浅谈系列&#xff0c;收录在专栏 C 语言中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些 C 语言重要的语法特性 &#x1f3…...

【Kotlin】Kotlin函数那么多,你会几个?

目录标准函数letrunwithapplyalsotakeIftakeUnlessrepeat小结作用域函数的区别作用域函数使用场景简化函数尾递归函数&#xff08;tailrec&#xff09;扩展函数高阶函数内联函数&#xff08;inline&#xff09;inlinenoinlinecrossinline匿名函数标准函数 Kotlin标准库包含几个…...

饲养员喂养动物-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-2】饲养员喂养动物 记得 关注&#xff0c;收藏&#xff0c;评论哦&#xff0c;作者将持续更新。。。。 【案例目标】 案例描述 饲养员在给动物喂食时&#xff0c;给不同的动物喂不同的食物&#xff0c;而且在每次喂食时&#xff0c;动物都会发出欢快的叫声。例如&…...

数据分析:消费者数据分析

数据分析&#xff1a;消费者数据分析 作者&#xff1a;AOAIYI 创作不易&#xff0c;如果觉得文章不错或能帮助到你学习&#xff0c;记得点赞收藏评论一下哦 文章目录数据分析&#xff1a;消费者数据分析一、前言二、数据准备三、数据预处理四、个体消费者分析五、用户消费行为总…...

Transformer论文阅读:ViT算法笔记

标题&#xff1a;An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 会议&#xff1a;ICLR2021 论文地址&#xff1a;https://openreview.net/forum?idYicbFdNTTy 文章目录Abstract1 Introduction2 Related Work3 Method3.1 Vision Transformer3.2…...

Android基础练习解答【2】

文章目录一 填空题二 判断题三 选择题四 简答题一 填空题 1&#xff0e;除了开启开发者选项之外&#xff0c;还需打开手机上的 usb调试 开关&#xff0c;然后才能在手机上调试App。 2&#xff0e;App开发的两大技术路线包括 _原生开发_和混合开发。 3&#xff0e;App工程的编译…...

k8s 搭建

需求&#xff1a;搭建k8s 为后续自动部署做准备进程&#xff1a;安装至少两个ubuntu18.04系统&#xff08;一个master 一到多个 node&#xff09;每个系统上都要装上docker 和 kubernetes安装dockersudo su apt-get update#安装相关插件 apt-get install apt-transport-https c…...

安全运维之mysql基线检查

版本加固 选择稳定版本并及时更新、打补丁。 稳定版本&#xff1a;发行6-12个月以内的偶数版本。 检查方法&#xff1a; 使用sql语句:select version(); 检查结果&#xff1a; 存在问题&#xff1a;当前数据库版本较老需要更新 解决方案&#xff1a;前往http://www.mysql…...

跨境电商卖家敦煌、雅虎、乐天、亚马逊测评自养号的重要性!

作为亚马逊、敦煌、乐天、雅虎等跨境的卖家&#xff0c;这两年以来&#xff0c;面对流量越来越贵的现实&#xff0c;卖家需要更加珍惜每次访问listing页面的流量&#xff0c;把转化做好&#xff0c;把流量尽可能转化为更多的订单。 提升转化率的技巧 提升产品转化率&#xff0…...

Python 之 Matplotlib xticks 的再次说明、图形样式和子图

文章目录一. 改变 x 轴显示内容 xticks 方法再次说明1. x 轴是数值型数据2. 将 x 轴更改为字符串3. 总结二. 其他元素可视性1. 显示网格&#xff1a;plt.grid()2. plt.gca( ) 对坐标轴的操作三. plt.rcParams 设置画图的分辨率&#xff0c;大小等信息四. 图表的样式参数设置1. …...

3.InfluxDB WEB使用

结合telegraf做指标数据收集 点击 Load Data -> Telegraf 配置界面 influxDB支持在WEB-UI中生成配置文件 然后利用telegraf通过远程URL请求的方式进行获取 点击CREATE CONFIGURATION 创建telegraf配置文件 选择Bucket InfluxDB提供了很多配置好的监控模板供用户选择 可以…...

git冲突合并

一、版本说明 dev&#xff1a;本地仓库中的dev分支 master&#xff1a;本地仓库中的master分支 remotes/origin/master和origin/master&#xff1a;都是远程仓库上的master分支 二、一个解决冲突的常规流程 1、前提条件&#xff1a;不能在master分支上修改任何文件。master分支…...

项目自动化构建工具make/Makefile

目录 make/Makefile概念和关系 make/Makefie的使用 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重…...

双目客流统计方案的应用原理

双目客流统计客流摄像头采用立体视觉技术实现高度统计功能。基于视差原理。利用双镜头摄取的两幅图像的视差&#xff0c;构建三维场景&#xff0c;在检测到运动目标后。通过计算图像对应点间的位置偏差。获取目标的三维信息&#xff0c;在深度图像中对目标的检测与追踪&#xf…...

python魔术方法(二)

__getattr__() class A:def __getattr__(self,name):print(f"getting {name}")raise AttributeErroro A() print(o.test)程序调用一个对象的属性&#xff0c;当这个属性不存的时候希望程序做些什么&#xff0c;这里我们打印希望的属性&#xff0c;并且抛出异常 __…...

cmd for命令笔记

语法 help for输出如下&#xff1a; 对一组文件中的每一个文件执行某个特定命令。 FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 c…...

4.1 Filter-policy

1. 实验目的 熟悉Filter-policy的应用场景掌握Filter-policy的配置方法2. 实验拓扑 Filter-policy实验拓扑如图4-5所示: 图4-5:Filter-policy 3. 实验步骤 (1) 网络连通性 R1的配置 <Huawei>system-vi…...

day15_常用类

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、代码块[了解] 三、API 四、Object 五、包装类 六、数学和随机 零、 复习昨日 抽象接口修饰符abstractinterface是不是类类接口属性正常属性没…...

【网络原理5】IP协议篇

目录 IP协议报头 4位版本号 4位首部长度 8位服务类型(TOS) 16位总长度 IP拆包 16位标识、3位标志、13位片偏移​编辑 8位生存时间(TTL) 8位协议 16位首部校验和 网络地址管理 32位源ip&32位目的ip 方案一:动态分配ip地址 方案2:NAT网络地址转换(使用一个ip代…...

Unity导出WebGL工程,并部署本地web服务器

WebGL打包 设置修改 在Build Settings->PlayerSettings->Other Settings->Rendering 将Color Space 设置为Gamma 将Lightmap Encoding 设置为NormalQuality 在Build Settings->PlayerSettings->Publishing Settings 勾选Decompression Fallback 打包 完成配…...

蓝桥杯考试总结汇总

一进考场设置devc快捷键 设置注释和取消注释快捷键设置代码自动补全快捷键开启devc调试功能&#xff0c;详细可以看怎么开调试功能https://blog.csdn.net/hz18790581821/article/details/78418648比赛过程中&#xff0c;如果不相信自己是否做对&#xff0c;没有把握的&#xf…...

备战蓝桥杯【二维前缀和】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…...

北京房山网站建设产品更新培训/广州seo服务

文章目录参考资料1. 问题描述2. 解决方案2.1 将tensorflow降版本2.2 升级python版本参考资料 https://github.com/tensorflow/tensorflow/issues/55440 1. 问题描述 今天我在anaconda虚拟环境中安装好pytorch和tensorflow2.8的gpu版本后&#xff0c;在测试能否使用时报了以下…...

做购物网站的公司/百度推广账户搭建

我这里实验使用的工具是&#xff1a;linux系统版本-红帽6.5企业版&#xff0c;MySQL数据库版本-mysql-5.5.38一.准备工作&#xff1a;1.为了避免端口冲突、程序冲突等现象&#xff0c;建议先将使用rpm方式安装的mysql、mysql-server软件包卸载说明&#xff1a;rpm -q是为了查询…...

高校邦营销型网站建设测验答案/教育培训报名

CMake第三课 安装自己编写的头文件和共享库 一.完整过程 手把手教你学CMake&#xff0c;上一节讲到了安装文件。这一节我们将自己动手写一个动态库和一个静态库&#xff0c;并安装头文件和共享库以供其他程序使用 。下一节&#xff0c;我们将编写程序&#xff0c;应用这一节安…...

五百人建站/职业培训学校加盟

https://blog.csdn.net/jaffreyen/article/details/88574578...

宁波网站建设公司推荐易企网/合肥优化营商环境

1.介绍 TBD 2.应用背景 TBD 3.学习 课程目录 已完结 57 讲 开篇词 (1讲) 开篇词 | 作为程序员&#xff0c;为什么你应该学好数学&#xff1f; 导读 (1讲) 【导读&#xff1a;程序员应该怎么学数学&#xff1f;】 见TBD 基础思想篇 (18讲) 01 | 二进制&#xff1a;不了解…...

wordpress的站点地址如何配置/正规网站优化哪个公司好

word文件打开输入文字的时候&#xff0c;发现后面已经写好的文字在删除&#xff0c;添加一个新文字&#xff0c;后面的文字就消失一个。这种情况应该如何解决&#xff1f; 方法一&#xff1a; word下面的状态栏中有改写&#xff0c;我们点击【改写】就会切换为【插入】&#…...