LeetCode--HOT100题(47)

news2024/11/24 13:22:57

目录

  • 题目描述:105. 从前序与中序遍历序列构造二叉树(中等)
    • 题目接口
    • 解题思路
    • 代码
  • PS:

题目描述:105. 从前序与中序遍历序列构造二叉树(中等)

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

LeetCode做题链接:LeetCode-从前序与中序遍历序列构造二叉树

示例 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 保证 为二叉树的中序遍历序列

题目接口

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {

    }
}

解题思路

参考题解:动画演示 105. 从前序与中序遍历序列构造二叉树、

主要的思路是通过递归地将给定的preorder和inorder数组分成左右两半,并根据中序遍历的特点来构建二叉树。具体步骤如下:

  1. 从前序遍历的第一个元素开始,找到在中序遍历中的对应位置。
  2. 将中序遍历划分成左子树和右子树。
  3. 对左子树和右子树分别进行递归操作,构建它们的子树。
  4. 返回根节点。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
		 if (preorder.length == 0 || inorder.length == 0) {
            return null;
        }
        // 根据前序数组的第一个元素,就可以确定根节点
        TreeNode root = new TreeNode(preorder[0]);
        for (int i = 0; i < preorder.length; ++i) {
            // 用preorder[0]去中序数组中查找对应的元素
            if (preorder[0] == inorder[i]) {
                // 将前序数组分成左右两半,再将中序数组分成左右两半
                // 之后递归的处理前序数组的左边部分和中序数组的左边部分
                // 递归处理前序数组右边部分和中序数组右边部分
                int[] pre_left = Arrays.copyOfRange(preorder, 1, i + 1);
                int[] pre_right = Arrays.copyOfRange(preorder, i + 1, preorder.length);
                int[] in_left = Arrays.copyOfRange(inorder, 0, i);
                int[] in_right = Arrays.copyOfRange(inorder, i + 1, inorder.length);
                root.left = buildTree(pre_left, in_left);
                root.right = buildTree(pre_right, in_right);
                break;
            }
        }
        return root;
    }
}

成功!
在这里插入图片描述

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个喔~

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

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

相关文章

本地缓存、Redis数据缓存策略

目录 需求看似简单&#xff0c;一取一传但是&#xff0c;又出现了一个新的问题&#xff0c;数据丢了。 一、缓存缓存有哪些分类&#xff1a; 二、分析一下本地缓存的优势三、本地缓存解决方案&#xff1f;1、基于Guava Cache实现本地缓存2、基于Caffeine实现本地缓存3、基于Enc…

华为OD机试-机器人走迷宫

题目描述 机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入. 机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不能回退. 如代码类注释展示的样子,#表示可以走的方格,0代表障碍,机器人从0,0的位置…

【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略

超时重传机制连接管理机制三次握手四次挥手滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议理解 listen 的第二个参数 超时重传机制 主机A发送数据给B之后&#xff0c;可能因为网络拥堵等原因&#xff0c;数据无法到达主机B&#xff1…

日志规范整改

日志框架 日志级别 日志级别从高到低&#xff1a;TRACE < DEBUG < INFO < WARN < ERROR < FATAL 获取应用名字 <springProperty scop"context" name"spring.application.name" source"spring.application.name" defaultVal…

电子行业数字化工厂管理系统规划方案

电子行业作为现代社会的重要产业之一&#xff0c;具有十分广泛的应用前景和市场前景。随着科技的不断进步和消费者需求的不断升级&#xff0c;电子行业面临着不断提升产品品质、提高生产效率、降低成本等挑战。为了应对这些挑战&#xff0c;数字化工厂管理系统成为了电子行业不…

(10)(10.8) 固件下载

文章目录 ​​​​​​​前言 10.8.1 固件 10.8.2 Bootloader 10.8.3 APM2.x Autopilot 10.8.4 许可证 10.8.5 安全 前言 固件服务器(firmware server)可提供所有飞行器的最新固件。其中包括&#xff1a; CopterPlaneRoverAntennaTrackerSub 本页提供了一些被视为&quo…

考研408 | 【计算机组成原理】计算机系统的概述

计算机的发展 硬件的发展&#xff1a; 摩尔定律&#xff1a; 微处理机的发展&#xff1a; 软件的发展&#xff1a; 发展趋势&#xff1a; 总结&#xff1a; 计算机硬件的基本组成 早期的冯诺依曼机&#xff1a; 现代计算机的结构&#xff1a; 总结&#xff1a; 各个硬件的工作…

Flutter 完美的验证码输入框 转载

刚开始看到这个功能的时候一定觉得so easy&#xff0c;开始的时候我也是这么觉得的&#xff0c;这还不简单&#xff0c;然而真正写的时候才发现并没有想象的那么简单。 先上图&#xff0c;不上图你们都不想看&#xff0c;我难啊&#xff0c;到Github&#xff1a; https://gith…

macOS通过钥匙串访问找回WiFi密码

如果您忘记了Mac电脑上的WiFi密码&#xff0c;可以通过钥匙串访问来找回它。具体步骤如下&#xff1a; 1.打开Mac电脑的“启动台”&#xff0c;然后在其他文件中找到“钥匙串访问”。 2.运行“钥匙串访问”应用程序&#xff0c;点击左侧的“系统”&#xff0c;然后在右侧找到…

R语言+Meta分析;论文新方向

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

【HTML5高级第一篇】Web存储 - cookie、localStorage、sessionStorage

文章目录 一、数据存储1.1 cookie1.1.1 概念介绍1.1.2 存储与获取1.1.3 方法的封装1.1.4 总结 1.2 localstorage 与 sessionstorage1.2.1 概述1.2.2 操作数据的属性或方法1.2.3 案例-提交问卷1.2.4 Web Storage带来的好处 附录&#xff1a;1. HTML5提供的数据持久化技术&#x…

无代码集成铱云(易订货)连接更多应用

场景描述&#xff1a; 基于铱云开放API能力&#xff0c;无代码集成铱云连接多个应用&#xff0c;实现客户管理、电商数智化、供应链生态管理等。通过Aboter搭建业务自动化流程&#xff0c;实现多个应用的数据集成。 接口能力&#xff1a; 基础数据客户接口商品接口订单接口退…

ASP.NET Core IOC容器

//IOC容器支持依赖注入{ServiceCollection serviceDescriptors new ServiceCollection();serviceDescriptors.AddTransient<IMicrophone, Microphone>();serviceDescriptors.AddTransient<IPower, Power>();serviceDescriptors.AddTransient<IHeadphone, Headp…

量化自定义PyTorch模型入门教程

在以前Pytorch只有一种量化的方法&#xff0c;叫做“eager mode qunatization”&#xff0c;在量化我们自定定义模型时经常会产生奇怪的错误&#xff0c;并且很难解决。但是最近&#xff0c;PyTorch发布了一种称为“fx-graph-mode-qunatization”的方方法。在本文中我们将研究这…

【JAVA】多态

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…

【Sentinel】ProcessorSlotChain处理器插槽链与Node

文章目录 1、Sentinel的基本概念2、ProcessorSlotChain3、Node 1、Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09;规则判断…

FPGA输出lvds信号点亮液晶屏

1 概述 该方案用于生成RGB信号&#xff0c;通过lvds接口驱动逻辑输出&#xff0c;点亮并驱动BP101WX-206液晶屏幕。 参考&#xff1a;下面为参考文章&#xff0c;内容非常详细。Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客http://t.csdn.cn/Zy37p 2 功能描述 …

从零开始学习 Java:简单易懂的入门指南之Collection集合及list集合(二十一)

Collection集合及list集合 1.Collection集合1.1数组和集合的区别1.2集合类体系结构1.3Collection 集合概述和使用1.4Collection集合的遍历1.4.1 迭代器遍历1.4.2 增强for1.4.3 lambda表达式 2.List集合2.1List集合的概述和特点2.2List集合的特有方法2.3List集合的五种遍历方式2…

JS动态计算自动滚动距离

先上效果 具体实现代码&#xff08;如果用到vue项目中的css要取消scoped否则不生效&#xff09; 在这里插入代码片<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible"…

基于STM32的厨房环境监测系统

前言 本篇文章将之前所有的文章进行整合&#xff0c;是之前几篇文章的综合版。 MQ-2烟雾传感器模块功能实现&#xff08;STM32&#xff09; MQ-7一氧化碳传感器模块功能实现&#xff08;STM32&#xff09; dht11温湿度模块功能实现&#xff08;STM32&#xff09; 0…