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

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 题解

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 题解题目描述给定两个整数数组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]解题思路方法递归思路先序遍历的第一个元素是根节点在中序遍历中找到根节点的位置根节点左边的元素是左子树的中序遍历右边的元素是右子树的中序遍历根据左子树的长度在先序遍历中找到左子树的先序遍历和右子树的先序遍历递归地构造左子树和右子树复杂度分析时间复杂度O(n)其中 n 是二叉树的节点个数。每个节点只被处理一次。空间复杂度O(n)需要使用哈希表来存储中序遍历中元素的位置以及递归调用的栈空间。代码实现方法递归# Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) - Optional[TreeNode]: # 创建哈希表存储中序遍历中元素的位置 inorder_map {val: idx for idx, val in enumerate(inorder)} preorder_idx 0 def build(left, right): nonlocal preorder_idx # 递归终止条件 if left right: return None # 先序遍历的第一个元素是根节点 root_val preorder[preorder_idx] root TreeNode(root_val) preorder_idx 1 # 在中序遍历中找到根节点的位置 inorder_idx inorder_map[root_val] # 递归构造左子树和右子树 root.left build(left, inorder_idx - 1) root.right build(inorder_idx 1, right) return root return build(0, len(inorder) - 1)测试用例测试用例 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]总结本题是二叉树的经典问题主要考察对二叉树遍历和递归的理解和应用。通过使用递归我们可以根据先序遍历和中序遍历的结果构造二叉树。递归的核心思想是先序遍历的第一个元素是根节点在中序遍历中找到根节点的位置然后递归地构造左子树和右子树。这种方法不仅适用于从前序与中序遍历序列构造二叉树问题还可以应用于许多其他需要根据遍历结果构造二叉树的场景。掌握递归的思想对于解决这类问题非常重要。

相关文章:

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 题解

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 题解 题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1&…...

LeetCode 19. Remove Nth Node From End of List 题解

LeetCode 19. Remove Nth Node From End of List 题解 题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入&…...

2025届毕业生推荐的降重复率神器实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作跟内容创作范畴之中,降重网站已然成了规避文本重复率过高的关键辅助工…...

020、深度学习入门:神经网络基础与反向传播

昨天调一个三层的全连接网络,loss死活不降。打印梯度发现第一层的权重全是零——反向传播根本没传过去。同事凑过来看了一眼:“你激活函数梯度写错了吧?”一查代码,果然在tanh求导的地方少了个平方。这种低级错误让我想起刚入门时…...

第27章 2021真题作文

目录 题目2021.11-论面向方面的编程技术及其应用 题目2021.11-系统安全架构设计及其应用: 题目2021.11-论企业集成平台的理解与应用 题目2021.11-论面向方面的编程技术及其应用 针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编…...

Tensorflow-Cookbook最佳实践:如何避免常见陷阱与性能优化技巧

Tensorflow-Cookbook最佳实践:如何避免常见陷阱与性能优化技巧 【免费下载链接】Tensorflow-Cookbook Simple Tensorflow Cookbook for easy-to-use 项目地址: https://gitcode.com/gh_mirrors/te/Tensorflow-Cookbook TensorFlow作为深度学习领域最流行的框…...

nodejs新手福音,在快马平台零配置开启你的第一个后端项目

作为一个刚接触Node.js的新手,最让我头疼的就是环境配置。记得第一次尝试安装Node.js时,光是环境变量就折腾了半天,还经常遇到版本不兼容的问题。直到发现了InsCode(快马)平台,才发现原来学习Node.js可以这么简单。 项目结构一目了…...

Paper2Slides自定义样式:从学术风格到动漫主题的完整教程

Paper2Slides自定义样式:从学术风格到动漫主题的完整教程 【免费下载链接】Paper2Slides "Paper2Slides: From Paper to Presentation in One Click" 项目地址: https://gitcode.com/gh_mirrors/pap/Paper2Slides 想要快速将学术论文转化为精美的演…...

Net Insight推出可编程视频制作网络解决方案

随着实时媒体工作流程在设施、合作伙伴网络和云环境之间日益分布化,技术进步正在运营域之间创建可编程的分界点。基于这一动态趋势,Net Insight推出了可编程信任边界技术,使实时媒体互连在设施、网络和云环境之间传输时变得可预测。解释此次发…...

5步搞定微信聊天记录永久保存:WechatBakTool全面解析

5步搞定微信聊天记录永久保存:WechatBakTool全面解析 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool 在…...

Pexpect ANSI终端仿真:构建专业级命令行界面的完整指南

Pexpect ANSI终端仿真:构建专业级命令行界面的完整指南 【免费下载链接】pexpect A Python module for controlling interactive programs in a pseudo-terminal 项目地址: https://gitcode.com/gh_mirrors/pe/pexpect Pexpect是一个强大的Python模块&#x…...

思科报告:无线网络成企业战略增长引擎,AI驱动投资激增

企业正面临连接需求和人工智能驱动转型的拐点,而无线网络的战略性投资正成为企业成功的催化剂,在多个业务维度同时带来可衡量的回报。这是思科最新发布的研究报告得出的结论。在首份《2026年无线网络状态》全球报告中,这家IT和网络巨头调查了…...

Lepton AI批处理机制深度解析:提升GPU利用率的终极指南

Lepton AI批处理机制深度解析:提升GPU利用率的终极指南 【免费下载链接】leptonai A Pythonic framework to simplify AI service building 项目地址: https://gitcode.com/gh_mirrors/le/leptonai Lepton AI作为Pythonic AI服务构建框架,其批处理…...

【LeetCode刷题日记】:反转链表(面试基础考察)

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

ThorUI-uniapp插件生态解析:如何扩展你的开发能力

ThorUI-uniapp插件生态解析:如何扩展你的开发能力 【免费下载链接】ThorUI-uniapp dingyong0214/ThorUI-uniapp: 是一个基于 ThorUI 的 UniApp UI 库,适合用于 UniApp 开发中的 UI 设计和实现。 项目地址: https://gitcode.com/gh_mirrors/th/ThorUI-u…...

OpenClaw 报错大全:2026 年我踩过的 12 个坑 + 完整解决方案

上周 Agent Skills 生态突然爆了,OpenClaw 一夜之间成了标配工具。我也跟风装了一个,结果第一天就报了 5 个错,折腾到凌晨两点。后来几天陆续又踩了一堆坑,索性把所有报错都记下来,整理成这篇文章。如果你正在用 OpenC…...

如何用 Splinter 在 5 分钟内完成第一个 Web 自动化测试

如何用 Splinter 在 5 分钟内完成第一个 Web 自动化测试 【免费下载链接】splinter splinter - python test framework for web applications 项目地址: https://gitcode.com/gh_mirrors/sp/splinter Splinter 是一款强大的 Python Web 应用测试框架,能帮助…...

基于Pyright配置完全指南:命令行、配置文件与语言服务器设置详解

基于Pyright配置完全指南:命令行、配置文件与语言服务器设置详解 【免费下载链接】basedpyright pyright fork with various type checking improvements, improved vscode support and pylance features built into the language server 项目地址: https://gitco…...

Speakeasy与Google Authenticator深度集成:QR码生成与扫描全流程

Speakeasy与Google Authenticator深度集成:QR码生成与扫描全流程 【免费下载链接】speakeasy **NOT MAINTAINED** Two-factor authentication for Node.js. One-time passcode generator (HOTP/TOTP) with support for Google Authenticator. 项目地址: https://g…...

深入解析SimpleScreenRecorder的OpenGL录制技术:游戏录制终极解决方案

深入解析SimpleScreenRecorder的OpenGL录制技术:游戏录制终极解决方案 【免费下载链接】ssr SimpleScreenRecorder, a screen recorder for Linux 项目地址: https://gitcode.com/gh_mirrors/ss/ssr SimpleScreenRecorder是一款功能强大的Linux屏幕录制工具&…...

深入Minoca OS内核架构:模块化设计与驱动模型解析

深入Minoca OS内核架构:模块化设计与驱动模型解析 【免费下载链接】os Minoca operating system 项目地址: https://gitcode.com/gh_mirrors/os1/os Minoca OS作为一款轻量级操作系统,其内核架构采用高度模块化设计,结合灵活的驱动模型…...

Zrythm自动化功能完全解析:从入门到精通

Zrythm自动化功能完全解析:从入门到精通 【免费下载链接】zrythm a highly automated and intuitive digital audio workstation - official mirror 项目地址: https://gitcode.com/gh_mirrors/zr/zrythm Zrythm是一款高度自动化和直观的数字音频工作站&…...

Zrythm未来路线图:AI集成、云端协作与下一代音频技术

Zrythm未来路线图:AI集成、云端协作与下一代音频技术 【免费下载链接】zrythm a highly automated and intuitive digital audio workstation - official mirror 项目地址: https://gitcode.com/gh_mirrors/zr/zrythm Zrythm作为一款高度自动化且直观的数字音…...

Condition底层机制剖析:多线程等待与通知机制 _

在使用Lock之前,使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。 Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者…...

React Native 项目重构利器:使用 react-native-rename 快速迁移应用品牌

React Native 项目重构利器:使用 react-native-rename 快速迁移应用品牌 【免费下载链接】react-native-rename Rename react-native app with just one command 项目地址: https://gitcode.com/gh_mirrors/re/react-native-rename react-native-rename 是一…...

综合能源系统多时间尺度优化调度!诸多创新点

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...

【源-荷-储协同互动】考虑源-荷-储协同互动的主动配电网优化调度研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...

python statistics

# Python statistics模块:一个被低估的数据分析工具 很多人第一次接触Python数据分析时,往往会直奔pandas或numpy而去,这当然没错。但有时候,我们需要的只是简单的统计计算,比如算个平均数、中位数,或者看看…...

docker相关知识和优化

关于dockerfile常用命令对比 CMD RUN ENTRYPOINT RUN是构建时运行的命令 CMD ENTRYPOINT是运行时执行的命令 不同点在于 docker run 的参数 会直接替换CMD里命令 而 ENTRYPOINT 是直接追加在命令后 所以对于不想影响格式 固定执行的命令 使用 ENTRYPOINT 再通过ENTRYPOIN…...

python random

# Python 的 random 模块:不只是“随机”那么简单 很多人第一次接触 Python 的 random 模块,大概都是在写猜数字游戏的时候。输入几行代码,屏幕上跳出一个随机数,感觉像是给程序注入了某种“不确定的灵魂”。但如果你认为 random …...