尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

JAVA练习315- 从前序与中序遍历序列构造二叉树

JAVA练习315- 从前序与中序遍历序列构造二叉树
📅 发布时间:2026/7/21 6:53:39

题目概览

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

来源:105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

解题分析

方法:模拟

前序是:根 - 左 - 右,中序是 左 - 根 - 右。我们可以根据前序数组第一个元素拿到根节点,然后再到中序数组中进行拆分,我们定义前序数组的范围为 [ pi, pj ],中序数组的范围为 [ ii, ij ],中序数组中根节点的索引为 root,那么可以得到每个子数组的范围:

  • 中序子数组 - 左 :[ ii, root - 1 ]
  • 中序子数组 - 右 :[ root + 1, ij ]
  • 前序子数组 - 左 :[ pi + 1, pi + root - ii ]
  • 前序子数组 - 右 :[ pi + 1 + root - ii, pj ]

将这个范围作为参数继续往下传,然后重复拿根节点+拆分的操作即可,直到数组为空或只有一个元素停止。

时间复杂度:O(n)
空间复杂度:O(n)

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { int n = preorder.length; if (n == 0) { return null; } return buildTree(preorder, inorder, 0, n - 1, 0, n - 1); } public TreeNode buildTree(int[] preorder, int[] inorder, int pi, int pj, int ii, int ij) { if (pi > pj || ii > ij) { return null; } TreeNode node = new TreeNode(preorder[pi]); if (pi == pj || ii == ij) { return node; } int root = preorder[pi]; int rootIndex = ii; for (int i = ii; i <= ij; ++i) { if (root == inorder[i]) { rootIndex = i; } } node.left = buildTree(preorder, inorder, pi + 1, pi + rootIndex - ii, ii, rootIndex - 1); node.right = buildTree(preorder, inorder, pi + rootIndex - ii + 1, pj, rootIndex + 1, ij); return node; } }

相关新闻

  • DFS、BFS与01BFS算法详解与对比
  • OpenHarmony 本地文件 FS 文件系统操作封装(API Version23 + 适配版)
  • 重庆旧房改造公司实测排行:工艺与售后核心维度 - 互联网科技品牌测评

最新新闻

  • 假面骑士Decade:平成系列十周年纪念作解析
  • 【Petrel】基础教程2-构造建模全流程详细解读
  • LangGraph框架解析:大模型复杂工作流实战指南
  • 2026 杭州钻石回收门店种草,不同钻饰匹配渠道大盘点 - 奢侈品回收机构参考
  • 深入解析PRU中断控制器:架构、配置与实时系统应用
  • SolidWorks快捷键从入门到精通:提升三维建模效率的完整指南

日新闻

  • Python开发内部工具:7大核心库实战解析
  • 合肥雷达官方2026年7月最新信息:客户服务网点地址与售后热线权威公示 - 亨得利官方服务中心
  • PCA实战指南:从变量纠缠诊断到主成分业务解读

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号