LeetCode热题100--105. 从前序与中序遍历序列构造二叉树--中等

1. 题目

给定两个整数数组 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]

2. 题解

/*** 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 {int[] preorder;HashMap<Integer, Integer> dic = new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {this.preorder = preorder;for(int i = 0; i < inorder.length; i++)dic.put(inorder[i], i);return recur(0, 0, inorder.length - 1);}TreeNode recur(int root, int left, int right) {if (left > right) return null;                          // 递归终止TreeNode node = new TreeNode(preorder[root]);          // 建立根节点int i = dic.get(preorder[root]);                       // 划分根节点、左子树、右子树node.left = recur(root + 1, left, i - 1);              // 开启左子树递归node.right = recur(root + i - left + 1, i + 1, right); // 开启右子树递归return node;                                           // 回溯返回根节点}
}

3. 题解

出自:105. 从前序与中序遍历序列构造二叉树(分治,清晰图解)

1-6行:这是对TreeNode类的定义或者说结构体的定义,它是一棵二叉树,其中每个节点最多有两个子节点,一个左子节点和一个右子节点。如果没有提供值、左子节点或右子节点,它们将默认为null。

8-10行:这些代码定义了一个名为Solution的类,其中包含了一些与二叉树相关的方法。这段代码的主要功能是根据前序遍历和中序遍历结果来构建二叉树。

9行:将输入的前序遍历数组赋值给成员变量preorder。

11-12行:创建一个HashMap dic,用于存储中序遍历的元素及其在中序遍历中的索引。这样可以根据中序遍历结果定位根节点和左右子树的位置。

14行:调用recur函数构建二叉树。传入参数0表示前序遍历的第一个元素作为根节点,0和inorder.length - 1分别表示左边界和右边界,用于划分中序遍历结果。

23-44行:这是一个递归函数,用于根据前序遍历结果构建二叉树。该函数接受三个参数:root、left和right,分别代表前序遍历的根节点索引、中序遍历的左边界和右边界。

  • 如果左边界大于右边界,表示无法继续划分子树,返回null。
  • 否则,创建一个新的TreeNode,值为preorder[root](即前序遍历的根节点)。
  • 在HashMap dic中查找根节点的索引i,并将其设为左子树和右子树的中界。然后递归构建左右子树。
  • 最后返回当前处理的TreeNode。

在这段代码中,我们使用了前序遍历和中序遍历来确定二叉树的结构。在每一步中,我们根据前序遍历结果找到根节点,然后在中序遍历结果中划分出左子树和右子树,并递归构建它们。这样就可以从给定的前序遍历和中序遍历结果重建一棵二叉树。

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

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

相关文章

【WitSystem】详解JWT在系统登录过程中前端做了什么事,后端又做了什么事?

要理解 JWT&#xff08;JSON Web Token&#xff09;登录流程中前端与后端的职责分工&#xff0c;需先明确 JWT 的核心定位&#xff1a;它是一种无状态的身份认证令牌&#xff0c;用于替代传统 Session 认证&#xff0c;解决跨服务、跨域登录的问题。其流程本质是“后端生成令牌…

MongoDB 在线安装-一键安装脚本(CentOS 7.9)

1. 脚本概述本脚本用于在 CentOS 7.9 系统上在线安装 MongoDB&#xff0c;自动处理端口占用和重复安装问题&#xff0c;并创建管理员用户 test8&#xff0c;密码 test123。2. 功能停止并关闭防火墙检查 27017 端口占用并结束进程如果已安装 MongoDB&#xff0c;卸载重装配置 Mo…

树形数据结构之树状基础-算法赛

今天给分享的是一道算法决赛的题目&#xff0c;这道题目的综合要求比较高&#xff0c;希望大家可以好好理解&#xff0c;同时这道题用到的是树状树形结构的有关知识。可以用这几天学的相关内容结合起来。问题描述给定两个长度为 N的排列 A 和 B。若一对二元组下标 (i,j) 满足以…

Jenkins 构建清理策略:自带功能 vs Discard Old Build 插件,全场景实操指南

前言&#xff1a;在 Jenkins 持续集成过程中&#xff0c;构建记录、工作空间、产物包会不断积累&#xff0c;既占用磁盘空间&#xff0c;也会让构建历史变得臃肿。Jenkins 自带的“丢弃旧的构建”功能和 Discard Old Build 插件&#xff0c;是两种常见的构建清理方案。本文将详…

Leetcode | Hot100

文章目录两数之和字母异位词分组最长连续序列移动零盛水最多的容器三数之和接雨水无重复字符的最长子串找到字符串中所有字母异位词和为 K 的子数组滑动窗口最大值最小覆盖子串最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数矩阵置零螺旋矩阵旋转图像搜索二…

【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)

论文题目&#xff1a;Uncertainty Modeling for Out-of-Distribution Generalization 论文来源&#xff1a;ICLR 2022 论文作者&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2202.03958 论文源码&#xff1a;https://github.com/lixiaotong97/DSU ​ 一、摘要…

分布式系统单点登录(SSO)状态管理深度解析:从Cookie+Session到JWT的演进之路

分布式系统单点登录(SSO)状态管理深度解析&#xff1a;从CookieSession到JWT的演进之路作者&#xff1a;默语佬 | CSDN博主 在分布式微服务架构盛行的今天&#xff0c;单点登录已成为企业级应用的标准配置。本文将深入探讨SSO状态管理的技术演进&#xff0c;从传统的CookieSess…

从 WPF 到 Avalonia 的迁移系列实战篇7:EventTrigger 的迁移

从 WPF 到 Avalonia 的迁移系列实战篇7&#xff1a;EventTrigger 的迁移 在 WPF 中&#xff0c;EventTrigger 是非常常用的功能&#xff0c;它可以让我们直接在 XAML 中绑定事件与动画或动作&#xff0c;实现 UI 的交互效果。例如按钮点击时旋转、鼠标悬停时变色等。 然而&…

深圳比斯特|电池组PACK自动化生产线厂家概述

电池组PACK自动化生产线是指用于生产电池模组的一套自动化系统。这类生产线主要用于生产各类电池组&#xff0c;如锂离子电池组&#xff0c;应用于电动汽车、储能系统等领域。自动化生产线通过机械设备和计算机控制系统&#xff0c;实现电池组生产过程的自动化和高效率。整条生…

基于librdkafa C++客户端生产者发送数据失败问题处理#2

https://blog.csdn.net/qq_42896627/article/details/149025452?fromshareblogdetail&sharetypeblogdetail&sharerId149025452&sharereferPC&sharesourceqq_42896627&sharefromfrom_link 上次我们介绍了认证失败的问题。这次介绍另一个问题生产者发送失败…

pg卡死处理

[postgresapm ~]$ ps -ef|grep postgres:|grep -v grep|awk {print $2}|xargs kill -9 锁&#xff1a; 1 查找锁表的pid select pid from pg_locks l join pg_class t on l.relation t.oid where t.relkind r and t.relname lockedtable; 2 查找锁表的语句 select pid, …

Spring Boot 与 Elasticsearch 集成踩坑指南:索引映射、批量写入与查询性能

前言Elasticsearch 作为分布式搜索和分析引擎&#xff0c;凭借其高性能、可扩展性和丰富的查询能力&#xff0c;被广泛应用于日志分析、全文检索、电商搜索推荐等场景。 在 Spring Boot 项目中集成 Elasticsearch 已成为很多开发者的日常需求&#xff0c;但真正落地时往往会踩到…

windows 10打开虚拟机平台时,出现错误“找不到引用的汇编”解决办法

通过dism.exe开启虚拟机平台时&#xff0c;出现了以下错误&#xff1a;找不到引用的汇编&#xff0c;如下图所示 通过以下命令进行修复均无效&#xff1a; dism /online /cleanup-image /scanhealth sfc /scannow 最后通过加载windows系统的安装光盘iso, 双击setup.exe以【保…

设计模式(C++)详解——建造者模式(1)

<摘要> 建造者模式是一种创建型设计模式&#xff0c;通过将复杂对象的构建过程分解为多个步骤&#xff0c;使相同的构建过程能够创建不同的表示形式。本文从背景起源、核心概念、设计意图等角度深入解析该模式&#xff0c;结合电脑组装、文档生成等实际案例展示其实现方式…

移动端触摸事件与鼠标事件的触发机制详解

移动端触摸事件与鼠标事件的触发机制详解 在移动端开发中&#xff0c;我们经常会遇到一个现象&#xff1a;一次简单的触摸操作&#xff0c;不仅会触发touch系列事件&#xff0c;还会触发一系列mouse事件&#xff0c;最终甚至会触发click事件。这其实是浏览器为了兼容传统桌面端…

如何科学评估CMS系统性能优化效果?

为什么要评估性能优化效果&#xff1f; 在投入时间精力优化CMS系统后&#xff0c;很多开发者只凭"感觉"判断网站变快了&#xff0c;但这种主观判断往往不可靠。科学评估性能优化效果可以帮助我们&#xff1a; 量化优化成果&#xff1a;用数据证明优化的价值发现潜在问…

中控平台数据监控大屏

中控平台数据监控大屏前言&#xff1a;什么是数据大屏&#xff1f; 数据大屏就像是一个"数字仪表盘"&#xff0c;把复杂的数据用图表、动画等方式直观展示出来。想象一下汽车的仪表盘&#xff0c;能让你一眼看到速度、油量、转速等信息——数据大屏也是这个原理&…

【Vue2手录13】路由Vue Router

一、Vue Router 基础概念与核心原理 1.1 路由本质与核心要素 本质定义&#xff1a;路由是URL路径与页面组件的对应关系&#xff0c;通过路径变化控制视图切换&#xff0c;实现单页应用&#xff08;SPA&#xff09;的无刷新页面切换。核心三要素&#xff1a; router-link&#x…

【Git】零基础入门:配置与初始操作实战指南

目录 1.前言 插播一条消息~ 2.正文 2.1概念 2.2安装与配置 2.3基础操作 2.3.1创建本地仓库 2.3.2配置Git 2.3.3认识工作区&#xff0c;暂存区&#xff0c;版本库 2.3.4版本回退 2.3.5撤销修改 2.3.6删除文件 3.小结 1.前言 在 Java 开发场景中&#xff0c;团队协…

CAD多面体密堆积_圆柱体试件3D插件

插件介绍 CAD多面体密堆积_圆柱体试件3D插件可在AutoCAD内基于重力堆积算法在圆柱体容器内进行多面体的密堆积三维建模。插件采取堆积可视化交互界面&#xff0c;可观察多面体颗粒的堆积动态&#xff0c;并可采用鼠标进行多面体位置的局部微调。插件可设置重力堆积模拟时长参数…