当前位置: 首页 > 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;宽 * 高 像素点&…...

AI辅助web开发新体验:让快马智能生成实时Markdown编辑器应用

今天想和大家分享一个特别实用的开发体验——用AI辅助快速构建一个实时Markdown编辑器。作为一个经常需要写技术文档的开发者&#xff0c;我一直希望能有个简洁高效的编辑器工具&#xff0c;这次尝试用InsCode(快马)平台的AI能力来实现这个需求&#xff0c;整个过程出乎意料的顺…...

高精度运放在电流传感器中的设计与应用

高精度运算放大器在电流传感器中的应用设计1. 电流传感器概述1.1 电流传感器类型与特性电流传感器是用于测量电路电流的关键元件&#xff0c;根据测量原理主要分为以下几种类型&#xff1a;传感器类型测量范围典型应用场景分流电阻式μA~100A电池监测、电机控制磁感应式10mA~1k…...

不止是发布:手把手教你用Anolis OS 8.9的KeenTune和Alibaba Cloud Compiler优化云原生应用性能

深度实战&#xff1a;用Anolis OS 8.9的KeenTune与Alibaba Cloud Compiler打造云原生性能引擎 当云原生应用的QPS从5000飙升到20000时&#xff0c;性能调优就不再是选择题而是必答题。Anolis OS 8.9带来的KeenTune和Alibaba Cloud Compiler组合&#xff0c;就像给开发者配备了一…...

终极指南:如何用HS2-HF Patch轻松实现Honey Select 2中文本地化

终极指南&#xff1a;如何用HS2-HF Patch轻松实现Honey Select 2中文本地化 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为看不懂Honey Select 2的日文界…...

操作系统面试必考:银行家算法10问10答(含真题解析)

操作系统面试必考&#xff1a;银行家算法10问10答&#xff08;含真题解析&#xff09; 银行家算法作为操作系统中经典的死锁避免算法&#xff0c;几乎成为所有技术面试的必考题。无论是校招还是社招&#xff0c;面试官总喜欢用它来考察候选人对资源分配与系统安全的理解深度。本…...

OpenClaw安全防护:运行百川2-13B-4bits模型时的5条系统权限建议

OpenClaw安全防护&#xff1a;运行百川2-13B-4bits模型时的5条系统权限建议 1. 为什么需要安全防护 当我第一次在本地部署OpenClaw并接入百川2-13B-4bits模型时&#xff0c;那种兴奋感至今难忘——终于可以在自己的电脑上运行一个强大的AI助手了。但很快&#xff0c;一个意外…...

如何高效管理《神界:原罪2》模组?Divinity Mod Manager终极指南

如何高效管理《神界&#xff1a;原罪2》模组&#xff1f;Divinity Mod Manager终极指南 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager Divini…...

【AI智能体实战】基于Dify构建自然语言数据库查询系统的全流程解析

1. 为什么需要自然语言查询数据库&#xff1f; 想象一下这个场景&#xff1a;市场部的同事小王需要从公司数据库里找出"去年销售额超过100万且退货率低于5%的客户名单"。如果他不会写SQL&#xff0c;要么得找IT部门帮忙&#xff0c;要么得花半天时间导出Excel手动筛选…...

Zotero-GPT:智能文献处理的技术实现与应用指南

Zotero-GPT&#xff1a;智能文献处理的技术实现与应用指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 一、价值定位&#xff1a;重新定义文献管理的智能化范式 1.1 技术架构的革新突破 Zotero-GPT作为Zot…...

如何用Applite轻松管理macOS应用:告别复杂的终端命令

如何用Applite轻松管理macOS应用&#xff1a;告别复杂的终端命令 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为macOS上的应用安装和更新烦恼吗&#xff1f;Applite这款…...