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

力扣面试150(61/100)

8.20 105. 从前序与中序遍历序列构造二叉树

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

我的思路:

找到左子树和右子树和根节点,直接new TreeNode生成,根节点就是preorder[0]

inorder在preorder[0]左边的是左子树的(0,index + 1),那就可以生成左子树

右边是右子树:(index,length)

我的代码:

var buildTree = function(preorder, inorder) {const len = preorder.lengthif(len === 0){return null;}const root = preorder[0];const index = inorder.indexOf(root);const pre1 = preorder.slice(1,index + 1);const pre2 = preorder.slice(index + 1);const in1 = inorder.slice(0,index + 1);const in2 = inorder.slice(index + 1);const left = buildTree(pre1 , in1);const right = buildTree(pre2 , in2);return new TreeNode(root , left , right);
};

总结:

这段代码是一个经典的递归算法,用于根据前序遍历和中序遍历的结果来重建一棵二叉树。其核心思想在于巧妙地利用了两种遍历的特性。前序遍历的第一个元素永远是当前子树的根节点,而中序遍历中,根节点位于中间,其左侧是左子树的所有节点,右侧是右子树的所有节点。代码首先从前序遍历中取出根节点,然后在中序遍历中找到该根节点的位置,从而将中序遍历序列划分为左右两部分,分别对应左子树和右子树。接着,根据中序遍历划分出的左右子树长度,相应地从前序遍历中切出左右子树的部分。最后,代码通过递归调用自身,为左右子树重复上述过程,构建出完整的左右子树,并将它们与当前根节点连接起来,最终返回构建好的二叉树根节点。这种方法逻辑清晰,直观地体现了分治的思想。

http://www.xdnf.cn/news/1333873.html

相关文章:

  • 使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
  • 笔试——Day44
  • 使用RealSense相机和YOLO进行实时目标检测
  • 从零开发Java坦克大战Ⅱ(上) -- 从单机到联机(架构演进与设计模式剖析)
  • 01.初识mysql数据库,了解sql语句
  • React-native之组件
  • 《算法导论》第 34 章 - NP 完全性
  • J1939协议
  • C++围绕音视频相关的资料都有哪些?如何进行学习
  • 升级Android系统webview
  • 运维日常工作100条
  • linux内核源码下载
  • Redisson3.14.1及之后连接阿里云redis代理模式,使用分布式锁:ERR unknown command ‘WAIT‘
  • 双模式 RTMP H.265 播放器解析:从国内扩展到 Enhanced RTMP 标准的演进
  • 猫头虎开源AI分享|基于大模型和RAG的一款智能text2sql问答系统:SQLBot(SQL-RAG-QABot),可以帮你用自然语言查询数据库
  • PowerShell脚本检查业务健康状态
  • Web3:重构互联网秩序的下一代范式革命
  • OceanBase DBA实战营2期--SQL 关键字限流学习笔记
  • CAT1+mqtt
  • Bigemap APP 详细使用教程,入门学习PPT
  • KDD 2025 | CMA:一次训练,预测任意过去与未来!元学习+扩散模型颠覆时序预测!
  • 【嵌入式电机控制#33】FOC:意法电控驱动层源码解析——整体框架篇(了解,常查阅)
  • 【Day 31】Linux-LNMP
  • 0基础安卓逆向原理与实践:第3章:逆向工程理论基础
  • 8 webUI中-Controlnet(控制与约束)的应用分类与使用方法
  • C++高频知识点(三十一)
  • 【ElasticSearch】ElasticSearch Overview
  • k8sday12数据存储(1/2)
  • AI 效应: GPT-6,“用户真正想要的是记忆”
  • 凸问题-非凸问题-非凸模型