[leetcode M] 105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
示例 2:

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

提示:

1 <= preorder.length <= 3000
inorder.length == preorder.length
-3000 <= preorder[i], inorder[i] <= 3000
preorder 和 inorder 均 无重复 元素
inorder 均出现在 preorder
preorder 保证 为二叉树的前序遍历序列
inorder 保证 为二叉树的中序遍历序列

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {private Map<Integer, Integer> indexMap;public TreeNode myBuildTree(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {if (preorder_left > preorder_right) {return null;}// 前序遍历中的第一个节点就是根节点int preorder_root = preorder_left;// 在中序遍历中定位根节点int inorder_root = indexMap.get(preorder[preorder_root]);// 先把根节点建立出来TreeNode root = new TreeNode(preorder[preorder_root]);// 得到左子树中的节点数目int size_left_subtree = inorder_root - inorder_left;// 递归地构造左子树,并连接到根节点// 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素root.left = myBuildTree(preorder, inorder, preorder_left + 1, preorder_left + size_left_subtree, inorder_left, inorder_root - 1);// 递归地构造右子树,并连接到根节点// 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素root.right = myBuildTree(preorder, inorder, preorder_left + size_left_subtree + 1, preorder_right, inorder_root + 1, inorder_right);return root;}public TreeNode buildTree(int[] preorder, int[] inorder) {int n = preorder.length;// 构造哈希映射,帮助我们快速定位根节点indexMap = new HashMap<Integer, Integer>();for (int i = 0; i < n; i++) {indexMap.put(inorder[i], i);}return myBuildTree(preorder, inorder, 0, n - 1, 0, n - 1);}
}

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

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

相关文章

【Azure 架构师学习笔记】- Azure Databricks (8) --UC架构简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件 前言 UC 简单来说&#xff0c;就是管理两样东西&#xff1a;用户和元存储。 用户管理 所有Databri…

C#,笛卡尔树(Cartesian Tree)的构造、遍历算法与源代码

Ren Descartes 一、笛卡尔&#xff08;Ren Descartes&#xff09; 勒内笛卡尔&#xff08;Ren Descartes&#xff0c;1596年3月31日-1650年2月11日&#xff09;&#xff0c;1596年3月31日生于法国安德尔-卢瓦尔省的图赖讷&#xff08;现笛卡尔&#xff0c;因笛卡尔得名&#…

Day 30 标准IO

文章目录 1.什么是标准IO1.1 概念1.2 特点1.3 操作 2.缓存区3.函数接口3.1 打开文件fopen3.2 关闭文件 fclose3.3 读写文件操作3.3.1 每次读写一个字符&#xff1a;fgetc()、fputc()每次读一个字符fgetc()每次写一个字符fputc()(1)针对文件(2)针对终端feof和ferror 3.3.2 每次一…

通过Docker Compose的方式在Docker中安装Maven环境

目前可以说 Docker 已经是在开发部署中成为主流&#xff0c;所以我们很多环境和工具都会安装在 Docker 容器中&#xff0c;Maven 环境是 SpringBoot 项目中最常用的依赖管理工具。当我们使用自动运维工具如 Ansible、Chef 、Puppet、Walle、Spug等&#xff09;管理和部署 Maven…

击败.helper勒索病毒:恢复被加密的数据文件的方法

导言: 近年来&#xff0c;勒索病毒成为网络安全领域的一大威胁&#xff0c;其中.helper勒索病毒更是备受关注。该类型的勒索软件以其高效的加密算法&#xff0c;能够将用户的文件加密&#xff0c;迫使用户支付赎金才能解密数据。本文将介绍.helper勒索病毒的特点、恢复被加密数…

Unity红点系统的架构与设计

在游戏开发中&#xff0c;红点系统是一种常见的功能&#xff0c;用于提示玩家有未读消息或待处理任务。在Unity引擎中&#xff0c;我们可以使用脚本来实现红点系统&#xff0c;下面我将介绍一种基于Unity的红点系统的架构与设计&#xff0c;并给出对应的代码实现。 红点系统的代…

集成使用 GitHub Copilot 提升 IDEA 开发效率

集成使用 GitHub Copilot 提升 IDEA 开发效率 在现代软件开发中&#xff0c;集成开发环境&#xff08;IDE&#xff09;如IntelliJ IDEA已经成为开发人员不可或缺的工具。它们提供了代码编辑、调试、版本控制等一系列功能&#xff0c;极大地提高了开发效率。而GitHub Copilot作…

【Docker】Linux主机部署Docker

Docker部署 1.二进制文件部署 到如下地址&#xff0c;下载二进制包。 Docker官网&#xff1a;https://docs.docker.com/engine/install/binaries/ 网易镜像源&#xff1a;https://mirrors.163.com/docker-ce/linux/static/stable/x86_64/ 下载好的二进制包上传到主机&#xf…

【Android 13】使用Android Studio调试系统应用之Settings移植(十):外部模块依赖WifiTrackerLibRes的移植

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、 WifiTrackerLib子模块3.1 源目录3.2 Android.bp四、移植方法4.1 创建模块4.2 替换源文件4.3 修改build.gradle4.4 图示4.5 模块编译通过

003:高精地图数据采集

摘要&#xff1a;高精度地图数据采集涉及多个环节和技术&#xff0c;需要严谨的规划和执行&#xff0c;以确保采集到的地理信息质量可靠、精准&#xff0c;并能够支持各种智能交通和导航应用的需求。 一、设备准备 高精地图数据采集需要高精度的设备&#xff0c;如Lidar&#…

Java之获取Nginx代理之后的客户端IP

Java之获取Nginx代理之后的客户端IP Nginx代理接口之后&#xff0c;后台获取的IP地址都是127.0.0.1&#xff0c;解决办法是需要配置Nginx搭配后台获取的方法&#xff0c;获得设备的真实地址。我们想要获取的就是nginx代理日志中的这个IP nginx配置 首先在nginx代理的对应lo…

C#程序反编译经验总结

1. 反编译出的代码有问题时&#xff0c;可以用多个反编译工具之间的代码相互印证。&#xff08;比如.net reflector 与ILSpy&#xff09; 2. 有时Visual Studio编译的错误信息不明确时, 可以msbuild编译程序&#xff0c;msbuild的错误信息相对完整一些。 2.1 编译错误&#xf…

【笔记】APN 配置参数 bitmask 数据转换(Android KaiOS)

一、参数说明 &#xff08;一&#xff09;APN配置结构对比 平台AndroidKaiOS文件类型xmljson结构每个<apn>标签是一条APN&#xff0c;包含完成的信息层级数组结构&#xff0c;使用JSON格式的数据。最外层是mcc&#xff0c;其次mnc&#xff0c;最后APN用数组形式配置&am…

【漏洞复现-通达OA】通达OA video_file.php 任意文件下载漏洞

一、漏洞简介 通达OA video_file.php文件存在任意文件下载漏洞&#xff0c;攻击者通过漏洞可以读取服务器敏感文件。 二、影响版本 ● 通达OA2011 三、资产测绘 ● hunterapp.name"通达 OA" ● 特征 四、漏洞复现 GET /general/mytable/intel_view/video_file.…

Javaweb之SpringBootWeb案例之切入点表达式的详细解析

3.3 切入点表达式 从AOP的入门程序到现在&#xff0c;我们一直都在使用切入点表达式来描述切入点。下面我们就来详细的介绍一下切入点表达式的具体写法。 切入点表达式&#xff1a; 描述切入点方法的一种表达式 作用&#xff1a;主要用来决定项目中的哪些方法需要加入通知 …

带Alpha通道的TIFF文件在GeoServer发布PNG瓦片失败的问题

我在使用GeoServer发布Tiff切PNG瓦片切不了&#xff0c;但是JPG可以&#xff0c;用QGIS转坐标系之后可以&#xff0c;但是用ArcGIS转坐标系之后不可以&#xff0c;看GeoServer日志发现报错如下&#xff1a; org.geowebcache.GeoWebCacheException: Problem communicating with…

软考笔记--信息系统开发方法(下)

信息系统是一个极其复杂的人机交互系统&#xff0c;它不仅包含计算机技术&#xff0c;通信技术和网络规划以及其他的工程技术&#xff0c;而且&#xff0c;它还是一个复杂的管理系统&#xff0c;需要管理理论和方法的支持&#xff0c;因此&#xff0c;与其他工程项目相比&#…

AIGC基础:大型语言模型 (LLM) 为什么使用向量数据库,嵌入(Embeddings)又是什么?

嵌入&#xff1a; 它是指什么&#xff1f;嵌入是将数据&#xff08;例如文本、图像或代码&#xff09;转换为高维向量的数值表示。这些向量捕捉了数据点之间的语义含义和关系。可以将其理解为将复杂数据翻译成 LLM 可以理解的语言。为什么有用&#xff1f;原始数据之间的相似性…

HarmonyOS 自定义进度条 Stage模型

通过onTouch监听滑动&#xff0c;动态改变圆角 let radius 0Entry Component struct TestPage {State flip: boolean falseState progress:number 20build() {Row() {Column() {RelativeContainer(){Rect({ width: 100%, height: 40 }).radius(10).fill("#505050"…

springboot 使用rocketmq实现简单的TCC

商品微服务 商品扣减库存请求体 Data public class GoodsTccRequest {private List<Integer> skuIds;//商品售卖idprivate List<Integer> quantitys;//数量private String orderId;//订单号 } 商品TCC service public interface GoodsTccService {/*** 订单fe…