一起学习LeetCode热题100道(47/100)

news2024/9/21 18:45:07

47.从前序与中序遍历序列构造二叉树(学习)

给定两个整数数组 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 保证 为二叉树的中序遍历序列

解析:
一、找到根节点:
先序遍历的第一个元素是 3,所以根节点是 3。

二、分割中序遍历数组:
1.在中序遍历数组 [9, 3, 15, 20, 7] 中找到 3 的索引,为 1。
2.因此,左子树的中序遍历是 [9],右子树的中序遍历是 [15, 20, 7]。

三、确定子数组的长度:
1.左子树中序遍历的长度是 1,所以左子树先序遍历的长度也是 1(从第二个元素开始,即 9)。
2.右子树的中序遍历长度是 3,所以右子树先序遍历是从 20 开始的 3 个元素([20, 15, 7])。

四、递归构建子树:
1.使用 [9] 和 [9] 构建左子树(注意这里左子树先序遍历和中序遍历都只有一个元素,且相同)。
2.使用 [15, 20, 7] 和 [20, 15, 7] 构建右子树(递归过程相同,但规模更小)。

五、返回根节点:
最终返回构建好的根节点 3,其左子节点是 9,右子树是一个包含 20 为根节点的子树。

var buildTree = function (preorder, inorder) {
    if (preorder.length === 0 || inorder.length === 0) {
        return null;
    }

    // 先序遍历的第一个元素是根节点  
    const rootVal = preorder[0];
    let root = new TreeNode(rootVal);

    // 在中序遍历中找到根节点的位置  
    let inorderRootIndex = inorder.indexOf(rootVal);

    // 切割中序遍历数组,得到左子树和右子树的中序遍历  
    const inorderLeft = inorder.slice(0, inorderRootIndex);
    const inorderRight = inorder.slice(inorderRootIndex + 1);

    // 根据中序遍历的切割,切割先序遍历数组  
    // 注意,左子树的先序遍历长度应该和中序遍历长度一致  
    const preorderLeft = preorder.slice(1, 1 + inorderLeft.length);
    const preorderRight = preorder.slice(1 + inorderLeft.length);

    // 递归构建左子树和右子树  
    root.left = buildTree(preorderLeft, inorderLeft);
    root.right = buildTree(preorderRight, inorderRight);

    return root;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx变量+rewrite相关功能+反向代理+openresty

目录 1、nginx变量 &#xff08;1&#xff09;内置变量 示例 &#xff08;2&#xff09;自定义变量 示例 2、nginx中的rewrite模块功能 &#xff08;1&#xff09;ngx_http_rewrite_module 模块指令 1&#xff09;if指令 示例 2&#xff09;set指令 示例​编辑 3&am…

代码随想录算法训练营day48:单调栈

目录 739. 每日温度 503.下一个更大元素II 分析&#xff1a; 42. 接雨水 本质&#xff1a; 暴力解法 分析&#xff1a; 双指针优化 单调栈 84.柱状图中最大的矩形 分析&#xff1a; 双指针&#xff1a; 单调栈 739. 每日温度 力扣题目链接(opens new window) 请根…

这个大佬一年连中五篇顶会!

1、SLAM/3DGS/三维点云/医疗图像/扩散模型/结构光/Transformer/CNN/Mamba/位姿估计 顶会论文指导 2、基于扩散模型的跨域鲁棒自动驾驶场景理解 3、基于环境信息的定位&#xff0c;重建与场景理解 4、轻量级高保真Gaussian Splatting 5、基于大模型与GS的 6D pose estimatio…

【Redis】Redis线程与IO模型—(三)

Redis线程与IO模型 一、Redis 单线程二、多路复用机制三、Redis 6.0 多线程特性四、IO 多线程配置 一、Redis 单线程 通常说 Redis 是单线程&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff0c;其他功能&#xff0c;比如持久化、异步删除、集…

软件测试之全面质量管理

一.什么是TQM&#xff1f; 全面质量管理 英文&#xff1a;Total Quality Management TQM可以被定义为一种管理技术&#xff0c;用于改进与产品相关的过程、产品、服务和其他方法。 它关注的是整个业务&#xff0c;而不仅仅是一个特定的项目或过程。 二.TQM原则 以顾客为关注…

软考作弊率下降了78.68%!官方为了防止作弊做出了哪些努力?

01\软考违纪违规人数对比 2024年上半年软考&#xff08;机考&#xff09;共有52名考生被判违纪违规行为&#xff0c;其中浙江考区有9人&#xff0c;山东枣庄考区有10人&#xff0c;江苏考区有33人。 2023年下半年软考&#xff08;机考&#xff09;共有7名考生被判违纪违规行为…

磁盘格式化文件恢复:一文看懂数据恢复操作

当你意识到关键的硬盘已经被格式化&#xff0c;而且你不能获取里面的内容时&#xff0c;这会是非常令人沮丧的。这种情况可能是因为硬盘被不小心格式化&#xff0c;或者是你在试图修正一些问题、调整文件系统或者释放存储空间时&#xff0c;有意进行的格式化。无论具体情况是什…

【论文学习与撰写】论文中公式的编辑,Mathtype的使用,全文编号排版,智能截图识别公式,公式编号自动更新

1、准备工作 在word中安装mathtype插件&#xff0c; 2、插入公式 在想要插入公式的地方&#xff0c;点击右编号&#xff0c;在里面输入公式&#xff0c;保存&#xff0c;关闭&#xff0c;就会得到插入的公式。 3、公式编号的编辑&#xff0c;公式编号自动更新 要想插入的公式…

笔试练习day5

目录 游游的you题目解析解法方法一贪心方法二 腐烂的苹果题目解析例子1例子2解法多源BFS最短路径代码代码解析 JZ62 孩子们的游戏(圆圈中最后剩下的数)题目解析解法方法一模拟环形链表模拟数组模拟 方法二递推/递归/动态规划状态表示状态转移方程代码 感谢各位大佬对我的支持,如…

CORS error 302 Found

CORS error && 302 Found 场景 单点登录认证&#xff1a;访问A系统&#xff0c;在B系统登录认证 此处代码为A系统 controller ResponseBodyGetMapping("/idp/loginCheck")public void loginCheck(HttpServletRequest request, HttpServletResponse httpR…

基于vue框架的爱学习分享平台ud317(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,学科分类,交流答疑,论坛交流,学习资料 开题报告内容 基于Vue框架的爱学习分享平台 开题报告 一、项目背景与意义 随着互联网技术的飞速发展&#xff0c;知识的获取与传播方式正经历着前所未有的变革。在线教育平台逐渐成为满足…

【独立站搭建经验分享】B2C独立站如何搭建?怎么推广?

如果你的产品有C端属性&#xff0c;可能你就需要考虑建一个B2C独立站&#xff0c;用来满足访客的浏览和在线下单。那么B2C独立站应该怎么搭建&#xff0c;选择什么推广方式&#xff0c;这个前期最好有一些基本了解&#xff0c;本篇内容可以针对你最关心的问题进行讲解&#xff…

【文献】3D Gaussian Splatting for Real-Time Radiance Field Rendering

论文地址&#xff1a;https://arxiv.org/abs/2308.04079 项目&#xff1a; https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/ 代码&#xff1a; git clone https://github.com/graphdeco-inria/gaussian-splatting —recursive 一、文章概述 1.问题导向 辐射场…

《笑谈设计模式》 — 23种尝鲜版(未完待续......

引子&#xff1a;无论在平时开发过程中&#xff0c;还是深夜研读源码亦或者面试时都对遇到——设计模式。比如说Spring中的单例模式&#xff08;bean单例&#xff09;、工厂模式&#xff08;bean创建&#xff09;、代理模式&#xff08;动态代理&#xff09;、策略模式等。我们…

RTA-VRTE适配Orin

RTA-VRTE适配Orin sudo minicom -w -D /dev/ttyACM0 用户名 nvidia密码 123456底下的的rj45 ,对应的是eqos_0, (本次porting使用该接口)底下的的DEBUG(USB Micro-B)串口连接(本次porting使用该接口)上侧边的rj45,对应的是mgbe0_0#设置Orin的IP和默认网卡eqos_0

C语言:一维、二维数组详解

目录 一、数组的概念 二、一维数组创建和初始化 2.1 数组创建 2.2 数组的初始化 2.3 数组的类型 三、一维数组的使用 3.1 数组的下标 3.2 数组的输入与输出 四、⼀维数组在内存中的存储 五、sizeof计算数组元素个数 六、二维数组 6.1 二维数组的概念 6.2 二维数组…

虚幻游戏开发 | shader性能优化

如何查看shader性能消耗 1.Alt 8切换Shader Complexity mode查看shader性能消耗 (Alt 4切换回Lit Mode正常光照模式) 2.材质蓝图里查看instructions数量&#xff08;如图中箭头所示&#xff09; 3.直接在target platform上测试是最准确的。 &#xff08;running fewer instru…

思特科技案例:北京欢乐谷光影乐园

01      在北京欢乐谷的亲子领域&#xff0c;藏着一处“面积近400平米&#xff0c;炫酷堪比魔法世界的、美轮美奂的光影空间&#xff0c;做到了“让娃来了不想走&#xff0c;一玩就是一下午”。    思特科技案例&#xff1a;北京欢乐谷光影乐园      02      作…

去抖音视频水印的软件免费推荐,精选四款实用工具助你轻松去除水印

随着抖音等短视频平台的流行&#xff0c;我们常常会遇到想要保存某些视频但不想保留水印的情况。本文将为您推荐四款去抖音视频水印的实用工具&#xff0c;帮助您轻松去除视频中的水印&#xff0c;保存清晰的内容。 工具一&#xff1a;奈斯水印助手(小程序) 推荐指数&#xf…

DMDSC学习

DMDSC学习 ​ DM 共享存储数据库集群&#xff0c;允许多个数据库实例同时访问、操作同一数据库&#xff0c;具有高可用、高性能、负载均衡等特性。DMDSC 支持故障自动切换和故障自动重加入&#xff0c;某一个数据库实例故障后&#xff0c;不会导致数据库服务无法提供。 DMDSC…