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

算法 - 剑指Offer 重建二叉树

题目

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

解题思路

这题较为复杂, 首先审题,前序遍历规则:根左右, 中序遍历: 左根右, 首先可以知道的是前序遍历的第一个就是根节点,然后我们从这个根节点的值找到中序遍历的左子树和右子树, 分别在这个前序遍历的根节点值得左边为左子树,根节点值得右边为右子树, 然后再回到前序遍历, 找到根后面相同长度的左子树, 和左子树后面相同范围的右子树即可,依次类推。然后这题要求返回更节点, 首先想到的就是递归,一直return到最后的根节点, 然后我们这边将中序遍历的每个节点放到map中, 主要是为了获取中序遍历的下标, 然后我们创建一个递归函数, 参数分别是前序遍历根节点所在的Index下标, 中序遍历开始位置, 中序遍历结束位置, 然后大纲就是先创建一个root的TreeNode,用第一个参数前序遍历下标的值, 然后将该TreeNode分别指向左子树和右子树, 这里就需要用到递归函数了, 最后return这个root的TreeNode,左子树递归的参数很简单,第一个为根下标+1即可,因为是根左右,所以根的下一个下标必为左子树的根,第二个开始位置为左子树开始的位置,主要注意的是左子树结束的位置为map获取位置的-1,然后右子树的递归函数参数最难的就是右子树的根下标位置,根的下标位置其实是等于根节点下标 + 左子树长度 + 1=》 rootIndex + (前面左子树结束下标-前面左子树开始下标 + 1) + 1=》rootIndex + (inorderRootIndex - 1 - left + 1) + 1=> rootIndex + inorderRootIndex -left + 1, 这就是右子树在前序遍历中开始的位置了, 然后右子树的开始位置就是中序遍历RootIndex+1的位置, 结束位置就是之前的right位置就可以了, 具体实现代码如下。

Java解题思路

import java.util.HashMap;
import java.util.Map;
public class BuildTree {public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}Map<Integer, Integer> map;int[] preorder;public TreeNode buildTree(int[] preorder, int[] inorder) {this.preorder= preorder;map = new HashMap<>();for (int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return buildT(0, 0, inorder.length - 1);}private TreeNode buildT(int rootIndex, int left, int right) {if(left > right){return null;}int inorderRootIndex = map.get(preorder[rootIndex]);TreeNode root = new TreeNode(preorder[rootIndex]);root.left = buildT(rootIndex + 1, left, inorderRootIndex - 1 );root.right = buildT(rootIndex + inorderRootIndex - left + 1 , inorderRootIndex + 1, right);return root;}
}

相关文章:

算法 - 剑指Offer 重建二叉树

题目 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解题思路 这题较为复杂&#xff0c; 首先审题&#xff0c;前序遍历规则&#xff1a;根左右&#xff0c; 中序遍历&#x…...

手写JavaScript常见5种设计模式

想分享的几种设计模式 目前模式&#xff1a;工厂模式&#xff0c;单例模式&#xff0c;适配器模式&#xff0c;装饰者模式&#xff0c;建造者模式 建造者模式 简介&#xff1a;建造者模式&#xff08;builder pattern&#xff09;比较简单&#xff0c;它属于创建型模式的一种…...

Python 异步: 当前和正在运行的任务(9)

我们可以反省在 asyncio 事件循环中运行的任务。这可以通过为当前运行的任务和所有正在运行的任务获取一个 asyncio.Task 对象来实现。 1. 如何获取当前任务 我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。 ... # …...

REDIS-雪崩、击穿、穿透

直接发车&#x1f697; 一.雪崩 1.触发原因 A.大量缓存数据在同一时间过期(失效) B.redis故障宕机 上述均导致全部请求去访问数据库&#xff0c;导致DB压力骤增&#xff0c;严重则导致数据库宕机/系统宕机 2.应对策略 不同触发原因&#xff0c;应对策略也不一致 应对A&a…...

什么人合适学习Python

发了几天的Python基础&#xff0c;也认识了一些朋友&#xff0c;忽然有人问起&#xff0c;说为啥学Python&#xff0c;或者说啥人学习Python&#xff0c;作为一个教龄8年从Python一线讲师到Python教学主管的我和大家分享一下个人的看法&#xff0c;还是提前说一下&#xff0c;个…...

greenDao的使用文档

介绍&#xff1a;greenDAO 是一款轻量级的 Android ORM 框架&#xff0c;将 Java 对象映射到 SQLite 数据库中&#xff0c;我们操作数据库的时候&#xff0c;不在需要编写复杂的 SQL语句&#xff0c; 在性能方面&#xff0c;greenDAO 针对 Android 进行了高度优化&#xff0c; …...

基于JAVA+SpringBoot+LayUI+Shiro的仓库管理系统

基于JAVASpringBootLayUIShiro的仓库管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项…...

金三银四面试必看,复盘字节测试开发面试:一次测试负责人岗位面试总结

最近面试了某企业的测试负责人岗位&#xff0c;历经四面&#xff0c;收获蛮多的。 这篇文章&#xff0c;我想聊聊这次面试过程中的一些经历&#xff0c;以及些许经验和教训。 岗位要求 岗位名称&#xff1a;测试负责人 岗位要求&#xff1a;1、扎实的技术以及丰富的技术项目…...

【算法自由之路】 贪心算法

贪心算法 局部最右得到全局最右难点在于如何证明局部最优可以得到全局最优堆 和 排序 是贪心算法最常用的实现算法 贪心算法作为最符合自然智慧的算法&#xff0c;思路是从小部分取最优从而获得最终的最优&#xff0c;但是难得是怎样获取部分最优才能得到全局最优。 有时候我…...

Scratch少儿编程案例-水果忍者-学生作业

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

7.Docker Compose

Docker Compose 介绍 Docker Compose是Docker官方编排&#xff08;Orchestration&#xff09;项目之一&#xff0c;负责快速的部署分布式应用。其代码目前在https://github.com/docker/compose上开源。Compose 定位是 「定义和运行多个 Docker 容器的应用&#xff08;Definin…...

GitHub访问问题与 Steam++下载及使用(适合小白)

前言 &#x1f4dc; “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 ​ 目录 前言 一、Steam的介绍 1、大概介绍 2、详细介绍 二、Ste…...

Oracle对象——视图之简单视图与视图约束

文章目录什么是视图为什么会使用视图视图语法案例简单视图的创建更改数据基表&#xff0c;视图数据会变化么&#xff1f;更改视图数据&#xff0c;基表数据会变更么&#xff1f;带检查约束的视图结论创建只读视图&#xff08;MySQL不支持&#xff09;总结什么是视图 视图是一种…...

SAP模块常用增强总结

MM模块&#xff1a; 采购订单增强&#xff1a; BADI &#xff1a;ME_GUI_PO_CUST ME_PROCESS_PO_CUST 物料凭证增强&#xff1a; BADI&#xff1a;MB_DOCUMENT_BADI USER-EXIT&#xff1a;MBCF0002 实现功能1、当参照预留过帐时&#xff0c;检查填入数量是否小于预留数量 2…...

当make执行遇到 Arguments too long

1. 问题 Ubuntu20.04上make编译生成so的时候报错&#xff1a; make[1]:execvp:/bin/sh:Arguments too long对应makefile中的报错位置&#xff0c;仅仅是生成so的时候报错&#xff0c;伪代码如下 ${build_tool} -shared -fpic -o "$" ${OBJ_FILE} ${LDFLAGS}然而如…...

《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)

1.简介 上一篇文章中&#xff0c;从TestNg的特点我们知道支持变量&#xff0c;那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试。那么如何实现同时启动不同的浏览器对脚本进行测试&#xff0c;且听我娓娓道来。 2.项目实战 2.1创建一个TestNg class 1.首先按…...

Maven基础

Maven简介 传统项目&#xff1a; jar包不统一 不兼容 项目中有部分jar包会升级 没升级的部分会起冲突 管理复杂 Maven本质是一个项目管理工具 pom POM Project Object Model 项目对象模型 把项目以对象形式进行管理 先写 pom.xml 的配置文件 代表一个项目 1个项目对应1个po…...

C++入门:初识类和对象

C入门&#xff1a;类和对象1 本节目录C入门&#xff1a;类和对象11.auto关键字&#xff08;C11)1.1类型别名思考1.2auto简介typeid运算符&#xff1a;获取类型信息1.3 auto的使用细则1.4auto不能推到的场景2.基于范围的for循环(C11)2.1范围for的语法2.2范围for的使用条件3.指针…...

BERT在CNN上也能用?看看这篇ICLR Spotlight论文丨已开源

如何在卷积神经网络上运行 BERT&#xff1f;你可以直接用 SparK —— 字节跳动技术团队提出的提出的稀疏层次化掩码建模 ( Designing BERT for Convolutional Networks: Sparse and Hierarchical Masked Modeling )&#xff0c;近期已被人工智能顶会 ICLR 2023 收录为 Spotligh…...

【MFC】模拟采集系统——界面设计(17)

功能介绍 启动界面 开始采集&#xff1a; PS&#xff1a;不涉及 数据保存&#xff0c;重现等功能 界面设计 界面分为三块&#xff1a;顶部黑条带关闭按钮、左边对话框&#xff0c;右边的主界面 资源&#xff1a; 顶部黑条 top.bmp 2* 29 &#xff08;宽 * 高 像素点&…...

霍尔电流传感器原理与应用全解析

霍尔电流传感器测量原理深度解析 1. 霍尔效应电流测量基础 1.1 霍尔效应原理 霍尔效应是电流测量的基础物理现象&#xff0c;当导体或半导体薄片置于磁场中&#xff0c;并在其两端施加控制电流时&#xff0c;垂直于电流和磁场方向的两侧会产生电势差&#xff0c;这种现象称为…...

R200系列超高频读写器:从指令集到实战的物联网资产管理开发指南

1. R200系列读写器&#xff1a;物联网资产管理的利器 第一次接触R200系列读写器时&#xff0c;我就被它的多标签识读能力惊艳到了。这款超高频&#xff08;UHF&#xff09;读写器不仅支持840MHz~960MHz频段&#xff0c;还能在30米范围内同时读取上百张RFID标签&#xff0c;这简…...

百川2-13B-4bits模型商用指南:OpenClaw自动化服务合规部署要点

百川2-13B-4bits模型商用指南&#xff1a;OpenClaw自动化服务合规部署要点 1. 商用授权与合规基础 百川2-13B-4bits模型作为国内少数明确开放商用申请的大语言模型&#xff0c;其授权体系与常见的开源协议有本质区别。我在实际部署过程中发现&#xff0c;很多开发者容易忽略一…...

从零开始搭建自己的POC库:GitHub爬取+本地管理全攻略

从零构建个人POC武器库&#xff1a;自动化采集与智能管理实战指南 在漏洞研究和渗透测试领域&#xff0c;拥有一个组织良好的POC&#xff08;Proof of Concept&#xff09;库就像战士拥有趁手的武器。本文将带你从零开始&#xff0c;通过自动化工具和系统化方法&#xff0c;打造…...

Ext2Read:Windows用户如何轻松读取Linux分区文件

Ext2Read&#xff1a;Windows用户如何轻松读取Linux分区文件 【免费下载链接】ext2read A Windows Application to read and copy Ext2/Ext3/Ext4 (With LVM) Partitions from Windows. 项目地址: https://gitcode.com/gh_mirrors/ex/ext2read 你是否遇到过这样的情况&a…...

DataX 实战:从零部署到多场景数据同步

1. DataX入门&#xff1a;为什么选择它作为数据同步工具 第一次接触DataX是在三年前的一个紧急项目里&#xff0c;当时需要把生产环境的MySQL数据实时同步到分析库。试过几种方案后&#xff0c;最终被DataX的稳定性和灵活性打动。作为阿里开源的数据同步工具&#xff0c;它最大…...

数据可视化避坑指南:当产品经理要你做Echarts版丝带图时,这3个技术难点要注意

Echarts丝带图实战&#xff1a;破解企业级数据可视化的三个高阶难题 当医药企业的销售总监盯着大屏上跳动的数字&#xff0c;突然提出"能不能做成Power BI那种丝带图效果"时&#xff0c;开发团队的沉默往往不是因为技术难度&#xff0c;而是对未知领域的本能警惕。这…...

Claude模型选型指南:Opus/Sonnet/Haiku三大系列在真实项目中的性能价格对比

Claude模型选型实战&#xff1a;Opus/Sonnet/Haiku三大系列性能与成本深度评测 1. 企业级AI选型的核心考量 在构建商业AI解决方案时&#xff0c;技术决策者往往面临模型选型的复杂权衡。Anthropic推出的Opus、Sonnet和Haiku三大系列&#xff0c;分别针对不同规模和应用场景的…...

VLN性能提升秘籍:详解JanusVLN的‘记忆宫殿’如何解决长期导航的内存爆炸问题

VLN性能优化实战&#xff1a;JanusVLN混合记忆机制解析与工程落地指南 1. 视觉语言导航的工程挑战与性能瓶颈 在智能家居助手、仓储机器人等实际应用场景中&#xff0c;视觉语言导航&#xff08;VLN&#xff09;系统经常面临三大核心性能挑战。首先是内存占用失控——传统方法需…...

零基础玩转CosyVoice:3步完成声音克隆,制作专属语音祝福

零基础玩转CosyVoice&#xff1a;3步完成声音克隆&#xff0c;制作专属语音祝福 1. 引言&#xff1a;让声音成为你的专属礼物 你有没有想过&#xff0c;用自己或亲友的声音&#xff0c;生成一段独一无二的语音祝福&#xff1f;比如&#xff0c;用妈妈的声音说“生日快乐”&am…...