当前位置: 首页 > 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.dtcms.com/a/340944.html

相关文章:

  • Leetcode 深度优先搜索 (11)
  • AI +金融 = 七大核心维度+ 落地典型困难
  • Final Cut Pro X Mac fcpx音视频剪辑编辑
  • AI + 金融领域 + 落地典型案例
  • 基于FPGA的实时图像处理系统(2)——VGA显示彩条和图片
  • 项目1其二(验证码、jwt)
  • 实时视频技术选型深度解析:RTSP、RTMP 与 WebRTC 的边界
  • 云计算学习100天-第25天
  • YOLOv11 到 C++ 落地全流程:ONNX 导出、NMS 判别与推理实战
  • 基于卷积神经网络的多输出数据回归预测CNN(多输入多输出)
  • 将SSL配置迁移到Nacos的步骤
  • 软件测试:如何利用Burp Suite进行高效WEB安全测试
  • 面试官视角分析与提问点
  • SpringBoot3 Ruoyi芋道管理后台vben5.0
  • 记录 docker容器打包成镜像 在其他服务器快速启动镜像和容器
  • Linux《进程间通信(下)》
  • 什么是股指期货可转移阿尔法策略?
  • Web3:重构互联网秩序的下一代范式革命
  • 三格电子Profinet转Modbus RTU网关技术详解
  • (第二十五节课内容总结)
  • AGV小车cad+三维图+设计说明书
  • Autoware Universe 感知模块详解 | 第一节 宏观认识Autoware Universe整体架构
  • Linux Shell 常用操作与脚本示例详解
  • DL00271-基于YOLOv11的激光雷达LiDAR船舶目标检测含完整数据集
  • C++开发/Qt开发:单例模式介绍与应用
  • 系统架构设计师备考第1天——系统架构概述
  • Redis-缓存-雪崩-持久化、集群、灾备
  • VSCode架构解析
  • MyIP:开源的功能强大的网络诊断工具箱,解析与部署
  • PyTorch中的c10::ArrayRef和at::IntArrayRef