news 2026/5/10 19:58:46

LeetCode(python)——105.从前序与中序遍历序列构造二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode(python)——105.从前序与中序遍历序列构造二叉树

题目

给定两个整数数组preorderinorder,其中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 <= 3000
  • inorder.length == preorder.length
  • -3000 <= preorder[i], inorder[i] <= 3000
  • preorderinorder无重复元素
  • inorder均出现在preorder
  • preorder保证为二叉树的前序遍历序列
  • inorder保证为二叉树的中序遍历序列

思路

1.前序序列——找根

2.中序序列——划分左右子树

3.递归遍历

具体步骤:
(1)递归结束条件:如果前序or中序序列为空,说明已遍历结束,return None

(2)创建根节点:取前序序列的第一个元素

(3)分左右子树:

  • 在inorder中找根节点的索引值
  • 根据这个索引值将preorder和inorder拆分成左右两个子树
  • left_in = inorder[:root_index],right_in = inorder[root_index + 1:]
  • left_pre = preorder[1:len(root_index) + 1],right_pre = preorder[len(root_index)+1,:]
  • 递归处理左右子树

代码

# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]: if not preorder or not inorder: # 如果序列为空,return None return None root_val = preorder[0] # 取根节点 root = TreeNode(root_val) root_idx = inorder.index(root_val) # 在中序中找根节点索引 left_in = inorder[:root_idx] # 根据根节点索引划分左右子树 right_in = inorder[root_idx + 1:] left_pre = preorder[1: len(left_in) + 1] right_pre = preorder[len(left_in) + 1:] root.left = self.buildTree(left_pre, left_in) # 递归处理左右子树 root.right = self.buildTree(right_pre, right_in) return root
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 15:36:37

Hazelcast与Kafka集成实战:构建企业级实时数据处理平台

Hazelcast与Kafka集成实战&#xff1a;构建企业级实时数据处理平台 【免费下载链接】hazelcast hazelcast - 这是一个分布式数据存储和计算平台&#xff0c;用于构建高性能、可扩展的应用程序。适用于实时数据处理、缓存、分布式计算等场景。特点包括高性能、可扩展 项目地址…

作者头像 李华
网站建设 2026/5/9 12:52:46

ZK暗战终局:STARK用哈希匕首撕碎「信任神殿」的数学圣战

一、STARK的三大技术突破 比特鹰解析STARK核心优势&#xff1a;透明化信任机制 无需预先生成可信参数&#xff08;如Zcash的复杂仪式&#xff09;&#xff0c;所有参数通过公开哈希算法生成实测对比&#xff1a;参数生成效率比SNARK提升1000倍核心价值&#xff1a;彻底消除可信…

作者头像 李华
网站建设 2026/5/9 22:17:08

【CTF Web】从脚本小子到漏洞高手,落地路径直接抄!

一、入门阶段&#xff08;1-2 个月&#xff09;&#xff1a;打好基础&#xff0c;搞定入门题 阶段目标&#xff1a;理解 Web 架构逻辑&#xff0c;独立破解 CTF Web 入门题&#xff08;SQL 注入、XSS、弱口令&#xff09;&#xff0c;能使用基础工具抓包改包。 核心知识点&am…

作者头像 李华
网站建设 2026/5/8 2:23:42

终极毫秒转换指南:快速掌握时间格式转换技巧

终极毫秒转换指南&#xff1a;快速掌握时间格式转换技巧 【免费下载链接】ms 项目地址: https://gitcode.com/gh_mirrors/msj/ms.js 在JavaScript开发中&#xff0c;时间格式转换是一个常见但容易出错的任务。ms.js作为一款轻量级的毫秒转换工具库&#xff0c;能够让你…

作者头像 李华
网站建设 2026/5/7 14:58:11

软件管控工具选型:兼顾资源池化、预测、审计的一体化平台

软件管控工具选型&#xff1a;兼顾资源池化、预测、审计的一体化平台我是从事IT运维与IT治理多年的技术专家。今天我想和大家一起聊聊一个非常重要但常被忽视的问题——软件管控工具选型。你们可能知道&#xff0c;在大规模的企业或机构中&#xff0c;软件资源的管理和调度往往…

作者头像 李华
网站建设 2026/5/3 20:23:05

夸克网盘在线解析 - 免费工具

今天教大家一招能解决夸克网盘限制的在线工具。这个工具也是完全免费使用的。下面让大家看看我用这个工具的下载速度咋样。地址获取&#xff1a;放在这里了&#xff0c;可以直接获取 这个速度还是不错的把。对于平常不怎么下载的用户还是很友好的。下面开始今天的教学 输入我给…

作者头像 李华