每日一题:LeetCode-105.从前序遍历与中序遍历构造二叉树

每日一题系列(day 02)

前言:

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈

   🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉算法👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长的道路🏇🏇,我们要做的,就是斩妖除魔💥💥,打怪升级!💪💪当然切记不可😈走火入魔😈,每日打怪,日日累积,终能成圣🙏🙏!今天就开启我们的斩妖之旅!✈️✈️

LeetCode-105.从前序与中序遍历序列构成二叉树:

题目:

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

示例1:

在这里插入图片描述

示例2:

在这里插入图片描述

注意事项:

  • 1 <= preorder.length <= 3000
  • inorder.length == preorder.length
  • -3000 <= preorder[i], inorder[i] <= 3000
  • preorder 和 inorder 均 无重复 元素
  • inorder 均出现在 preorder
  • preorder 保证 为二叉树的前序遍历序列
  • inorder 保证 为二叉树的中序遍历序列

解法:

  思路:

  我们在学习二叉树的时候,很早就会了使用前序和中序或者中序和后序的序列来还原一颗二叉树。找到根节点位置将根节点创建出来,用左右子树接收根节点左右子树的前中序遍历的结果。接着向左子树和右子树分别重复上述操作,就可以递归构建一颗二叉树、

  1、我们把前序遍历数组的左右子树给找出来,所以需要中序遍历的结果来,用pos作为下标,只要中序遍历数组的值不等于前序遍历数组的第一个值,pos就++,最后得到的pos就是根节点。
  2、创建根节点,将前序遍历的第一个数组放入根节点。
  3、使用两个临时数组分别接收前序和中序遍历结果(pos是用来索引区间的下标),然后向左子树递归,递归完成之后将两个数组清空,同样,再用这两个数组接收右子树前序中序遍历的结果,将右子树递归处理,最后返回根节点即可。
在这里插入图片描述

  代码实现:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */

class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size() == 0) return NULL;
        int pos = 0, n = preorder.size();//下标以及二叉树节点个数
        while(inorder[pos] != preorder[0]) pos++;//找出中序遍历根节点位置
        TreeNode *root = new TreeNode(preorder[0]);//创建根节点
        vector<int> preArr, inArr;//两个临时数组接收前序中序的遍历结果

        for(int i = 1; i <= pos; i++) preArr.push_back(preorder[i]);//将前序遍历结果给数组preArr
        for(int i = 0; i < pos; i++) inArr.push_back(inorder[i]);//将中序遍历结果给inArr
        root -> left = buildTree(preArr, inArr);//左子树递归
        preArr.clear();//清理两个临时数组
        inArr.clear();

        for(int i = pos + 1 ; i < n ; i++) preArr.push_back(preorder[i]);//同样的方法
        for(int i = pos + 1 ; i < n ; i++) inArr.push_back(inorder[i]);
        root -> right = buildTree(preArr, inArr);
        return root;
    }
};

  这是一道力扣的中等题,总的来说也并不算很难,理解掌握对前序遍历与中序遍历递归构建的过程才是最重要的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

配置华为云镜像加速器

登录华为云官网&#xff0c;点击控制台 在服务列表里面寻找swr服务 点击镜像中心&#xff0c;点击镜像加速器 {"registry-mirrors": [ "https://301dc05233c6419b810bdb22135af9eb.mirror.swr.myhuaweicloud.com" ]}配置镜像加速器 vim /etc/docker…

数据中心运维管理:从人工到智能需要走几步?

一切的变化来自于数据中心规模、复杂度、设备多样性的挑战&#xff0c;将运维平台的重要性推向历史高点。 此外&#xff0c;基于业务连续性方面的考虑&#xff0c;分布式数据中心成为越来越多客户的选择。 一、数据中心面临的挑战 运维管理分散&#xff0c;缺乏统一的管理 I…

基于C#实现赫夫曼树

赫夫曼树又称最优二叉树&#xff0c;也就是带权路径最短的树&#xff0c;对于赫夫曼树&#xff0c;我想大家对它是非常的熟悉&#xff0c;也知道它的应用场景&#xff0c;但是有没有自己亲手写过&#xff0c;这个我就不清楚了&#xff0c;不管以前写没写&#xff0c;这一篇我们…

Idea如何使用git将代码上传到多个远程仓库

废话不多说了&#xff0c;看图指南吧&#xff1b;大佬勿喷哈 打开你的项目找到你要上传代码到另外库中的代码&#xff0c;找到git把图中地址跟链接名称写完就可以进行上传时候的选择了最后就可以进行提交了&#xff0c;提交都一样

万宾科技智能井盖传感器使用方式,具有什么效果?

有问题的井盖可能导致人们在行走或驾驶时不经意地踩中或碰到&#xff0c;从而导致摔倒、扭伤或交通事故等安全事故。有问题的井盖可能会破坏井盖和下方污水管道之间的密封性&#xff0c;导致污水泄漏。这不仅会对环境造成污染&#xff0c;还可能对公共卫生和健康构成威胁。 将智…

csapp 深入理解计算机系统 bomb lab(2)phase_2

bomblab及phase_1 同phase_1可以查看phase_2的汇编代 call 40145c <read_six_numbers>可以看出phase_2调用了read_six_numbers&#xff0c;然后把1和 (%rsp)比较&#xff0c;如果不是1&#xff0c;就会调用<explode_bomb>函数。 %rsp 存放地址&#xff0c;(%r…

获取ip属地(ip2region本地离线包-超简单)

背景 最近有涉及要显示ip属地&#xff0c;但我想白嫖&#xff0c;结果就是白嫖的api接口太慢了&#xff0c;要延迟3到4秒左右&#xff0c;很影响体验&#xff0c;而且不一定稳定。 结果突然看到了这个【ip2region】开源项目&#xff0c;离线识别ip属地&#xff0c;精度自己测…

字符串匹配算法——KMP

有文本串aabaabaaf&#xff0c;模式串aabaaf问文本串中是否出现过模式串 暴力解法 最不用动脑子的&#xff0c;直接两层for循环&#xff0c;逐个匹配&#xff0c;匹配到不相等的值时把文本串后移一位&#xff0c;再重新比较。这种方法的复杂度是O(mn)&#xff0c;该方法低效的…

java--static的应用知识:单例设计模式

1.什么是设计模式(Design pattern) ①一个问题通常有n中解法&#xff0c;其中肯定有一种解法最优的&#xff0c;这个最优的解法被人总结出来了&#xff0c;称之为设计模式。 ②设计模式有20多种&#xff0c;对应20多种软件开发中会遇到的问题。 2.单例设计模式 确保一个类只…

【史上最细教程】服务器MySQL数据库完成主从复制

文章目录 MySQL完成主从复制教程准备&#xff1a;原理&#xff1a;步骤&#xff1a; 推荐文章 MySQL完成主从复制教程 主从复制&#xff08;也称 AB 复制&#xff09;就是将一个服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从…

windows根据已有的安卓签名文件获取MD5签名

windows根据已有的安卓签名文件获取MD5签名 0 现状 uniapp 本机号码一键登录需要MD5的&#xff0c;现有的签名文件但是只有SHA1和SHA256 查看SHA1和SHA256 keytool -list -v -keystore [你的.keystore文件]1 前提 已有生成签名文件的环境 搭建Openssl环境&#xff0c;设置…

Spring框架学习 -- 读取和存储Bean对象

目录 &#x1f680;&#x1f680; 回顾 getBean()方法的使用 根据name来获取对象 再谈getBean() (1) 配置扫描路径 (2) 添加注解 ① spring注解简介 ② 对类注解的使用 ③ 注解Bean对象的命名问题 ④ 方法加Bean注解 (3) Bean 注解的重命名 (4) 获取Bean对象 -- …

Linux---常用命令汇总

文章目录 关于目录操作的命令ls/llcdpwdmkdir 关于文件操作的命令touchechocatrmmvcpvim 关于查询操作的命令greppsnetstat 关于目录操作的命令 ls/ll ls : 列出当前目录下的目录和文件&#xff08;以行的展示形式&#xff09; ll &#xff1a; 列出当前目录下的目录和文件&…

如何正确接入API接口通过淘宝商品ID和sku ID获取到淘宝商品SKU信息接口,可获取sku价格,sku销量,sku图片及sku库存参数等

接入API接口的正确方式可能因API的具体要求而有所不同&#xff0c;但一般来说&#xff0c;以下是一些通用的步骤&#xff1a; 获取API文档&#xff1a;API文档通常包括API的请求方式、请求参数、响应格式等信息。您需要仔细阅读文档&#xff0c;了解API的具体要求和使用方式。…

构建个性化预约服务:预约上门服务系统源码解读与实战

随着社会的发展&#xff0c;预约上门服务系统在满足用户需求、提升服务效率方面发挥着越来越重要的作用。在本文中&#xff0c;我们将深入研究预约上门服务系统的源码&#xff0c;通过实际的技术代码示例&#xff0c;揭示系统内部的关键机制&#xff0c;以及如何在实际项目中应…

mybatis 语法使用各种踩坑(持续更新中。。。)

1、大小写命名&#xff1a;这个别说了&#xff0c;都是泪。 2、联表查询查询&#xff0c;多条合成一条&#xff0c;不生效的原因 博主各种检查关联关系和字段大小写&#xff0c;本来是4条数据最后合成一条数据&#xff0c;死活给你直接返回了4条数据&#xff0c;而且每个类似p…

四肽-3——增加皮肤光滑度、紧致度,让肌肤看起来更年轻

Caprooyl四肽-3&#xff0c;也称为KGHK Caproic acid&#xff0c;是一种基于TGF-&#xff08;转化生长因子β&#xff09;的仿生脂肽结构&#xff0c;在细胞外基质成分的自然产生中发挥重要作用。肽序列是Lys-Gly-His-Lys。它可以减少细纹和皱纹的出现&#xff0c;提高皮肤弹性…

万宾科技智能井盖传感器效果,特点有哪些?

现在城市发展越来越好&#xff0c;对基础设施的改造越来越多&#xff0c;比如修路搭桥、整改生态等都是为民服务的好工程。平时走在路上我们享受着平整的路面&#xff0c;井然有序的交通也为我们带来很大的方便。但是一个又一个的井盖看起来无关紧要&#xff0c;实际上如果路上…

shell循环语句 for while until

目录 什么是循环语句 概念 for循环 格式 while循环 格式 until 循环 格式 实验 for &#xff08;1&#xff09;计算1到100的和 ​编辑 &#xff08;2&#xff09;100以内的偶数 &#xff08;从0开始到100结束&#xff0c;每次加2步 打印的都是偶数&#xff09; &…

maxwell采集数据到kafka报错

问题&#xff1a; 启动maxwell后出现数据更新后就出现以下报错。 13:29:14,727 ERROR MaxwellKafkaProducer - TimeoutException Position[BinlogPosition[binlog.000002:12215591], lastHeartbeat1700717043797] -- maxWellData: medical:consultation:[(id,212)] 13:29:14,7…