恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

LeetCode 105:从前序与中序遍历构造二叉树,Java 递归解法详解

  • 首页
  • 资讯中心
  • /
  • LeetCode 105:从前序与中序遍历构造二叉树,Java 递归解法详解

相关资讯

罗克韦尔 AB(伟肯)AB33I 风机驱动板卡 2026/8/9 2:22:38
终极Windows驱动管理神器:DriverStore Explorer完整指南,轻松释放数GB磁盘空间 2026/8/9 2:17:38
如何用OpenCascade.js在浏览器中实现专业级3D CAD建模:完整指南 2026/8/9 2:17:38

最新资讯

Runnable与LCEL
Muse Spark 1.2:以帕累托前沿优化机器学习训练成本与性能
编程学习开篇
Linux的时间同步+定时任务常用命令及选择
SQL Sever入门
风光储联合系统仿真建模与并网控制实践

今日推荐

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

LeetCode 105:从前序与中序遍历构造二叉树,Java 递归解法详解

发布时间:2026/8/9 2:22:38
LeetCode 105:从前序与中序遍历构造二叉树,Java 递归解法详解 一、题目描述给定一棵二叉树的前序遍历preorder和中序遍历inorder请还原这棵二叉树。题目保证数组中没有重复元素。preorder [3, 9, 20, 15, 7] inorder [9, 3, 15, 20, 7]构造结果如下3 / \ 9 20 / \ 15 7关键是从两种遍历序列中确定根节点并划分左右子树。二、前序找根中序分左右先回顾遍历顺序前序遍历根 - 左 - 右 中序遍历左 - 根 - 右前序遍历的第一个元素3是根节点。在中序遍历中找到3[9, 3, 15, 20, 7] ↑ 根节点根节点左边的[9]属于左子树右边的[15,20,7]属于右子树。左子树只有一个节点因此可以同步划分前序遍历左子树preorder [9]inorder [9] 右子树preorder [20,15,7]inorder [15,20,7]两个子问题与原问题结构相同因此可以递归构造从前序遍历中取出当前根节点在中序遍历中找到根节点的位置递归构造左子树递归构造右子树。三、完整 Java 代码class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { int len preorder.length; if (len 0) { return null; } TreeNode root new TreeNode(preorder[0]); // 找到根节点在中序遍历中的索引位置,这个值也是左子树的所有元素个数 int rootInInorder indexOf(inorder, preorder[0]); // 前序遍历中左子树的部分和右子树的部分 int[] preLeft Arrays.copyOfRange(preorder, 1, 1 rootInInorder); // 复制是左闭右开区间 int[] preRight Arrays.copyOfRange(preorder, 1 rootInInorder, len); // 中序遍历中左子树的部分和右子树的部分 int[] inLeft Arrays.copyOfRange(inorder, 0, rootInInorder); int[] inRight Arrays.copyOfRange(inorder, 1 rootInInorder, len); // 递归构建左右子树 root.left buildTree(preLeft, inLeft); root.right buildTree(preRight, inRight); return root; } // 返回 x 在 a 中的下标保证 x 一定在 a 中 private int indexOf(int[] a, int x) { for (int i 0; ; i) { if (a[i] x) { return i; } } } }四、常见错误1. 把中序遍历的第一个元素当成根节点根节点由前序遍历确定中序遍历只负责划分左右区域。2. 先构造右子树全局指针按“根、左、右”移动必须先递归左子树。3. 区间没有排除根节点正确边界为root.left build(inorderLeft, rootIndex - 1); root.right build(rootIndex 1, inorderRight);

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号