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

Leetcode 105:从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

public static TreeNode buildTree(int[] preorder, int[] inorder) {map= new HashMap<>();   // 方便根据数值查找位置for (int i = 0; i < inorder.length; i++) { // 用map保存中序序列的数值对应位置map.put(inorder[i], i);}return traversal(preorder,0,preorder.length, inorder,0,inorder.length);  // 前闭后开}//递归public static TreeNode traversal(int[] preorder,int preBegin,int preEnd,int[] inorder,int inBegin,int inEnd){if(preBegin>=preEnd || inBegin>=inEnd){return null;}int rootValue=preorder[preBegin];TreeNode root=new TreeNode(rootValue);  //创建根节点int rootIndex=map.get(rootValue); //根节点在中序遍历中的位置int leftInLen=rootIndex-inBegin;   //计算左子树的长度//构造左子树int leftPreBegin=preBegin+1;    //左子树的前序遍历起点int leftPreEnd=preBegin+leftInLen+1;  //左子树的前序遍历终点int leftInBegin=inBegin;     //左子树的中序遍历起点int leftInEnd= rootIndex;   //左子树中序遍历终点root.left=traversal(preorder,leftPreBegin,leftPreEnd,inorder,leftInBegin,leftInEnd);//构造右子树preBegin=preBegin+leftInLen+1;    //右子树的前序遍历起点preEnd=preEnd;  //右子树的前序遍历终点inBegin=rootIndex+1;     //右子树的中序遍历起点inEnd= inEnd;   //右子树中序遍历终点root.right=traversal(preorder,preBegin,preEnd,inorder,inBegin,inEnd);return root;}

相关文章:

  • 大数据中的电商数仓项目:探秘业务的核心
  • 【C++】——string模拟实现
  • GB-T 43206-2023 信息安全技术 信息系统密码应用测评要求
  • Vim安装与配置教程(解决软件包Vim没有安装可候选)
  • Mac安装第三方软件的命令安装方式
  • Django Celery技术详解
  • 【手撕面试题】Vue(高频知识点一)
  • Java八股文:程序员的“面试经”还是技术壁垒?
  • Vue Node 编译报错:digital envelope routines::unsupported
  • 打家劫舍I 打家劫舍II (leetcode)
  • 使用cad绘制一个螺旋输送机
  • 【Unity】实现轮盘抽奖
  • 【数据结构】二叉树运用及相关例题
  • 计算机网络基础知识(持续更新中)
  • RestTemplate使用详解
  • 【mysql】环境安装、服务启动、密码设置
  • CSS盒模型深入
  • ES2017异步函数现已正式可用
  • ES6简单总结(搭配简单的讲解和小案例)
  • Git的一些常用操作
  • iOS小技巧之UIImagePickerController实现头像选择
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • pdf文件如何在线转换为jpg图片
  • Protobuf3语言指南
  • Shadow DOM 内部构造及如何构建独立组件
  • SpriteKit 技巧之添加背景图片
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Xmanager 远程桌面 CentOS 7
  • 安卓应用性能调试和优化经验分享
  • 百度小程序遇到的问题
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 强力优化Rancher k8s中国区的使用体验
  • 收藏好这篇,别再只说“数据劫持”了
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (14)Hive调优——合并小文件
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)理解angular中的module和injector,即依赖注入
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (实战篇)如何缓存数据
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .md即markdown文件的基本常用编写语法
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net的C#语言取月份数值对应的MonthName值