力扣105-从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 - 力扣LeetCode给定两个整数数组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 3000inorder.length preorder.length-3000 preorder[i], inorder[i] 3000preorder和inorder均无重复元素inorder均出现在preorderpreorder保证为二叉树的前序遍历序列inorder保证为二叉树的中序遍历序列方法一递归本题的一个关键信息是两个序列中均没有重复元素前序遍历的第一个元素必然是根节点因此我们可以在中序遍历序列中定位到根节点的位置。而中序遍历的结果必然是左子树的中序遍历序列、根节点、右子树的中序遍历序列又根据中序遍历与前序遍历的序列长度相同所以可得左右子树的前序/中序遍历序列使用递归构造出左子树和右子树再把两棵子树的根节点接到整棵树根节点的左右两边即可注意到一个问题每次递归都要先根据前序遍历序列找到根节点然后去定位其在中序遍历序列中的位置这个过程是 O(n) 的我们可以在开始构造之前用一个哈希表记录一个节点在中序遍历序列中的出现位置。即key 是这个节点的值因为唯一value 是这个节点在中序遍历序列中出现的位置。这样一来只需要遍历一趟中序遍历序列后续的递归中都只需要 O(1) 的时间对根节点进行定位class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) - Optional[TreeNode]: def func(preorder_left: int, preorder_right: int, inorder_left: int, inorder_right: int): # 递归终止条件 if preorder_left preorder_right: return None # 前序遍历的第一个节点就是根节点 root_pre preorder_left # 构建根节点 root TreeNode(preorder[root_pre]) # 在中序遍历中定位根节点下标 inorder_root index[preorder[root_pre]] # 左子树中根节点数目 left_subTree_size inorder_root - inorder_left # 递归地构造左子树左子树的前序遍历序列是 preorder 从下标1开始往后找 left_subTree_size 个数目构成的序列 root.left func(preorder_left 1, preorder_left left_subTree_size, inorder_left, inorder_root - 1) # 右子树同理 root.right func(preorder_left left_subTree_size 1, preorder_right, inorder_root 1, inorder_right) return root n len(preorder) index {element: i for i, element in enumerate(inorder)} return func(0, n - 1, 0, n - 1)

相关新闻

TegraRcmGUI深度指南:3大技术挑战与高效解决方案

TegraRcmGUI深度指南:3大技术挑战与高效解决方案

TegraRcmGUI深度指南:3大技术挑战与高效解决方案 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 你是否曾经在面对Nintendo Switch的RCM模式注入…

2026/8/27 4:03:16 阅读更多 →
Windows 10下Gpg4win 4.3.1安装与加密邮件实战指南

Windows 10下Gpg4win 4.3.1安装与加密邮件实战指南

1. 项目概述:为什么在Windows 10上需要Gpg4win?如果你在Windows 10上处理过敏感邮件,或者需要向开源项目提交经过验证的代码提交,那你大概率听说过GPG(GNU Privacy Guard)。它是一套实现OpenPGP标准的免费工…

2026/8/29 8:06:32 阅读更多 →
终极窗口掌控术:如何用WindowResizer自由调整任意窗口大小

终极窗口掌控术:如何用WindowResizer自由调整任意窗口大小

终极窗口掌控术:如何用WindowResizer自由调整任意窗口大小 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾遇到过这样的情况:某个软件的窗口太小看…

2026/8/28 19:08:35 阅读更多 →

最新新闻

模型供应链安全实战:从Hugging Face事件看模型隔离与横向移动防护

模型供应链安全实战:从Hugging Face事件看模型隔离与横向移动防护

最近技术圈最受关注的安全话题之一,就是 OpenAI 发布的一份关于 Hugging Face 事件的技术报告。作为一个长期做模型部署和内部平台建设的人,我第一时间关注到的并不是攻击者是谁,而是报告里反复出现的一句话:内部模型突破了隔离&a…

2026/8/29 13:58:26 阅读更多 →
Vibe Coding实战指南:从零掌握AI编程核心工具与流程

Vibe Coding实战指南:从零掌握AI编程核心工具与流程

这套教程我整理了很长时间,重点覆盖 Vibe Coding 的核心概念、四个主流工具的分工,以及一套可以直接上手复制的实战流程。不管你是完全没写过代码的零基础学习者,还是已经有开发经验、想通过 AI 提升效率的后端工程师,都能从里面找…

2026/8/29 13:58:26 阅读更多 →
Hoppscotch Agent 实用指南:浏览器发不出 REST 请求时,如何用本地中继打通整条链路

Hoppscotch Agent 实用指南:浏览器发不出 REST 请求时,如何用本地中继打通整条链路

Hoppscotch Agent 实用指南:浏览器发不出 REST 请求时,如何用本地中继打通整条链路 【免费下载链接】hoppscotch Open-Source API Development Ecosystem • https://hoppscotch.io • Offline, On-Prem & Cloud • Web, Desktop & CLI • Open-…

2026/8/29 13:58:26 阅读更多 →
嵌入式开发入门:从按键控制LED到GPIO、中断与状态机实战

嵌入式开发入门:从按键控制LED到GPIO、中断与状态机实战

1. 项目概述:从“点灯”到嵌入式思维 “按键控制LED灯”,这几乎是所有嵌入式开发者的第一个“Hello World”。它简单到看起来有些乏味,但恰恰是这个最基础的项目,像一面镜子,清晰地映照出嵌入式系统开发的核心思维链条…

2026/8/29 13:58:26 阅读更多 →
STM32CubeMX+TouchGFX移植实战:STM32F746Discovery图形界面快速入门

STM32CubeMX+TouchGFX移植实战:STM32F746Discovery图形界面快速入门

上个月把这套流程重新完整走了一遍——用STM32CubeMX做图形化配置,配合TouchGFX Generator自动集成,在STM32F746Discovery板子上把TouchGFX跑起来。相比我第一次手动移植时各种头文件、回调函数满天飞,这次基本没碰寄存器,从零到屏…

2026/8/29 13:58:26 阅读更多 →
编程中等题突破指南:五大核心题型与实战调试技巧

编程中等题突破指南:五大核心题型与实战调试技巧

经典编程练习——“中等卷”这五个字,我在不同场合见过太多了。培训机构管它叫“拔高题”,刷题网站管它叫“进阶题库”,还有不少跟着网课学的朋友管它叫“魔鬼关卡”。但说句实在话,所谓中等卷,练的根本不是偏题怪题&a…

2026/8/29 13:57:26 阅读更多 →

日新闻

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:00:24 阅读更多 →
【JavaScript】内存管理-垃圾回收机制-内存泄露

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:00:24 阅读更多 →
Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/29 0:00:24 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 11:23:26 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 23:05:07 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 19:47:53 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/29 4:34:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/28 17:43:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/29 2:05:18 阅读更多 →