【力扣每日一题】力扣105从前序与中序遍历序列构造二叉树

题目来源

力扣105从前序与中序遍历序列构造二叉树

题目概述

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

思路分析

前序遍历的顺序是:根节点->左子树->右子树 中序遍历的顺序是:左子树->根节点->右子树 所以我们可以使用前序遍历确定树及其子树的根节点,利用中序遍历与之前确定下来的根节点来确定左右子树的范围。 使用力扣提供的例子

我们可以先找到根节点为3

然后就可以确定根节点的两个孩子节点,及其子树。

代码实现

java实现

public class Solution {Map<Integer, Integer> inorderDataAndIndex;public TreeNode buildTree(int[] preorder, int[] inorder) {// 建立中序遍历数据与下标的映射inorderDataAndIndex = new HashMap<Integer, Integer>(){{for (int i = 0; i < inorder.length; i++) {put(inorder[i],i);}}};return create(preorder,inorder, 0, preorder.length - 1, 0, inorder.length - 1);}TreeNode create(int[] preorder, int[] inorder, int pStart, int pEnd, int iStart, int iEnd) {if (pStart > pEnd) {return null;}// 前序遍历第一个节点为根节点TreeNode root = new TreeNode(preorder[pStart]);// 找到在中序遍历的位置int inorderIndex = inorderDataAndIndex.get(preorder[pStart]);// 左子树大小int leftSubTreeSize = inorderIndex - iStart;// 构建子树root.left = create(preorder,inorder, pStart + 1, pStart + leftSubTreeSize  , iStart, inorderIndex - 1);root.right = create(preorder,inorder, pStart + leftSubTreeSize + 1, pEnd  , inorderIndex + 1, iEnd);return root;}}

c++实现

class Solution {
public:unordered_map<int, int> inorder_data_and_index;TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {// 建立中序遍历序列值与下标的映射,方便查找for (int i = 0; i < inorder.size(); i++) {inorder_data_and_index[inorder[i]] = i;}return create(preorder, inorder, 0, preorder.size() - 1, 0, inorder.size() - 1);}TreeNode* create(vector<int>& preorder, vector<int>& inorder, int p_start, int p_end, int i_start, int i_end) {if (p_start > p_end) {return nullptr;}// 前序遍历第一个节点为根节点TreeNode* root = new TreeNode(preorder[p_start]);// 找到在中序遍历的位置int inorder_index = inorder_data_and_index[preorder[p_start]];// 左子树大小int left_sub_tree_size = inorder_index - i_start;// 构建子树root->left = create(preorder, inorder, p_start + 1, p_start + left_sub_tree_size, i_start, inorder_index - 1);root->right = create(preorder, inorder, p_start + left_sub_tree_size + 1, p_end, inorder_index + 1, i_end);return root;}
}

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

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

相关文章

极电电子WMS项目顺利验收,盘古信息助推新能源车企数字化转型

近年来&#xff0c;中国新能源汽车产销持续保持着较高增速&#xff0c;产销总量连续9年位居全球第一。 在产销高涨的背后&#xff0c;新能源汽车行业“内卷”现象也日益加剧&#xff0c;“配置战”、“价格战”等愈发激烈&#xff0c;驱动车企提高自身竞争力&#xff0c;以抢占…

如何在Shopee平台上进行杯子选品:策略指南

在当今电商平台激烈竞争的环境下&#xff0c;卖家在Shopee平台上进行杯子选品需要经过深思熟虑的策略。通过市场趋势分析、竞品研究、产品差异化、供应链稳定性、利润分析、季节性和节日考量、客户反馈、营销策略、数据驱动选品以及持续优化&#xff0c;卖家可以提高杯子产品在…

C++如何避免float误差?

C如何避免float误差&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; …

Vue | (二)Vue核心(下) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;class与style绑定&#x1f4da;条件渲染&#x1f4da;列表渲染&#x1f407;基本列表&#x1f407;key的原理&#x1f407;列表过滤&#xff08;搜索&#xff09;&#x1f407;列表排序&#x1f407;Vue数据监测 &#x1f4da;收集表单数据&#x1f4da;…

关于uniapp H5应用无法在触摸屏正常显示的处理办法

关于uniapp H5应用无法在触摸屏正常显示的处理办法 1、问题2、处理3、建议 1、问题 前几天&#xff0c; 客户反馈在安卓触摸大屏上无法正确打开web系统&#xff08;uni-app vue3开发的h5 应用&#xff09;&#xff0c;有些页面显示不出内容。该应用在 pc 端和手机端都可以正常…

读写算杂志读写算杂志社读写算编辑部2024年第2期目录

教育资讯 教育部印发通知部署&#xff1a;做好2024年寒假期间校外培训治理工作 1 北京提升学校心理健康工作水平——每校至少配备一名专职心理健康教育教师 1 湖北孝感&#xff1a;2026年达成小学毕业时人人会游泳 2 内蒙古部署寒假期间校外培训治理工作 2 …

Stable Diffusion 3的到来巩固了 AI 图像对抗 Sora 和 Gemini 的早期领先优势

Stability AI 将其更改为 Stable Diffusion 3。VentureBeat 报道称&#xff0c;Stability AI 的下一代旗舰 AI 图像生成模型将使用类似于 OpenAI 的 Sora 的扩散变压器框架。其当前模型仅依赖于扩散架构。虽然尚未发布&#xff0c;但您可以在等候名单中注册。 官方网址链接&am…

day53 String

创建String 对象 String s "abc"; String s new String(); String的常用方法 长度方法 length(); 比较方法 equals() equalsIgnoreCase() 忽略大小写比较 compareTo() compareToIgnoreCase() 比较是否相等 基本类型比较数值是否相等 引用类型比较两个引用是…

2023 H1 中国边缘公有云服务市场 Top2,百度智能云加速推动分布式云智能化升级

近期&#xff0c;IDC 发布了《中国边缘云市场跟踪研究 2023 H1》。报告显示&#xff0c;2023 上半年&#xff0c;中国边缘公有云服务市场规模 24.3 亿元&#xff0c;同比增速达到 41.8%。 其中&#xff0c;百度智能云以 15.7% 的市场份额位列中国边缘公有云服务市场第二&#…

【PyQt】15-让控件支持拖拽工作

文章目录 前言一、控件的拖拽-setAcceptDrops()1.1 代码1.2 运行结果 总结 前言 允许控件的拖拽操作&#xff0c;后续可以升级为拖拽图片之类的。hasHtml()、hasUrls()、hasImage() 一、控件的拖拽-setAcceptDrops() 比如把A放到B&#xff0c;需要两步 B—setAcceptDrops(Tru…

深入学习TS的高阶语法(泛型、类型检测、内置工具)

文章目录 概要一.TS的类型检测1.鸭子类型2.严格的字面量类型检测 二.TS的泛型1.基本使用2.传递多个参数3.泛型接口4.泛型类5.泛型约束6.映射类型&#xff08;了解&#xff09; 三.TS的知识扩展1.模块的使用-- 内置类型导入 2.类型的查找3.第三方库的类型导入4.declare 声明文件…

【单片机】使用AD7606+AD698芯片读取RVDT角位移

接上文&#xff0c;经过第一阶段的AD2S1210测量旋转变压器的角位移之后&#xff0c;现在用AD698来进一步的加强验证&#xff0c;目前网上有关于这方面的研究资料还是挺少的。   AD698是美国ADI公司生产的单片式线性位移差分变压器信号调节系统。将AD698与RVDT&#xff0f;LVD…

ctfshow MISC 2023愚人杯做题笔记

2023愚人杯 1.奇怪的压缩包 下载的题目压缩包是ZIP伪加密&#xff0c;修改后&#xff0c;解开得一个图片文件black.png。使用01编辑器打开&#xff0c;发现尾部有一个压缩包。 把尾部的压缩包另存后&#xff0c;发现该压缩包为加密包。再用01打开&#xff0c;发现尾部有一个b…

日常工作软件安装总结

日常工作软件安装总结 系统服务安装集成 Skywalking SpringBoot集成Skywalking服务 地址&#xff1a;http://192.168.1.52:8686/general nohup java -javaagent:/mnt/skywalking-agent/skywalking-agent/skywalking-agent.jar -DSW_AGENT_NAMEdev::rms-risk-service agent…

Web Serial API串口通信,实现web和electron扫码枪读取数据

文章目录 前言一、Serial API是什么&#xff1f;二、API使用步骤1.navigator.serial.requestPort()2.port.open(options)3.reader.read()4.port.close()其他常见API:完整代码 三、electron使用 前言 本文将讲述Web Serial API简单应用&#xff0c;以扫码枪为示例&#xff0c;通…

idea查找所有未使用的代码

1.背景 最近在做无用代码下线的时候发现一个方法里会引用很多个方法&#xff0c;一旦该方法删除以后&#xff0c;里面被引用的方法应该也一同下线&#xff0c;但是一个一个的找过去比较耗费精力&#xff0c;下面给大家推荐一个idea自带的代码分析工具 2.代码分析工具 Code-&…

【无标题】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景&#xff1a; 做单链表反转题目&#xff0c;报错&#xff1a;member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候&#xff0c;已经处理了n2->next情况却依然报错 这个报错提示含义是&#xff1a;大概就…

创新性3D数据合成模型,微软推出EgoGen

随着AR、VR等设备的广泛应用,第一人称的应用开始增多。但在研发方面面临不同的挑战,例如&#xff0c;图像模糊、视觉混乱、遮挡更严重等&#xff0c;给视觉模型的训练带来重大挑战。 一方面,人工标注真实第一视角数据集&#xff0c;来培训深度学习模型的成本和难度都很高。另一…

第八章 shell编程之sed

目录 1.1. 概念 1.1.1. 工作原理&#xff1a; 1.2. 基本语法 1.2.1. 格式 1.2.2. 参数 1.2.3. 定址符 1.2.4. 操作 1.3. 输出文本 1.3.1. 范例文件&#xff1a; 1.3.2. 示例 1.4. 文本替换 1.4.1. 范例文件 1.4.2. 格式&#xff1a; 1.4.3. 示例 1.5. 删除文本 …

提升生产能力的必备工具——MES系统自动排产

在现代制造业中&#xff0c;生产能力的提升对企业发展至关重要。随着市场竞争的日益激烈&#xff0c;企业不仅需要提高产品质量&#xff0c;还需要提高生产效率。而MES系统自动排产作为一种先进的生产管理工具&#xff0c;可以帮助企业高效地安排生产&#xff0c;实现生产能力的…