每日算法之从前序与中序遍历序列构造二叉树

题目描述

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

分而治之解法

思路

首先我们可以知道,
前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子树 ] 排序。
中序遍历性质: 节点按照 [ 左子树 | 根节点 | 右子树 ] 排序。

那么有:
前序遍历的首元素 为 树的根节点 node 的值。
在中序遍历中搜索根节点 node 的索引 ,可将 中序遍历 划分为 [ 左子树 | 根节点 | 右子树 ] 。
根据中序遍历中的左(右)子树的节点数量,可将 前序遍历 划分为 [ 根节点 | 左子树 | 右子树 ] 。

题解

class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:def recur(root, left, right):if left > right: return                               node = TreeNode(preorder[root])                      i = dic[preorder[root]]                               node.left = recur(root + 1, left, i - 1)             node.right = recur(i - left + root + 1, i + 1, right)return node                                          dic, preorder = {}, preorderfor i in range(len(inorder)):dic[inorder[i]] = ireturn recur(0, 0, len(inorder) - 1)

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

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

相关文章

央视影音 视频下载 2

浏览器猫抓插件&#xff0c;拿到视频地址&#xff0c;这个地址的播放不正常&#xff0c;花屏。https://dh5.cntv.qcloudcdn.com/asp/h5e/hls/2000/0303000a/3/default/6edd15a0ebb3467993bec51a95be0e22/2000.m3u8 改一下地址&#xff0c;把代码中的h5e去掉。网址改为https://…

Wezterm的安装和简单配置

配置文件 进入 C:\Users\xxx 目录&#xff0c; 创建 .wezterm.lua 配置内容 wezterm 默认用 cmd.exe, 我是 win11&#xff0c;希望默认用 powershell。 希望 wezterm 的主题配色&#xff0c;保持和 powershell 默认配色一致&#xff0c;也就是 Compell 主题。 目的是在频繁…

基于springboot+vue+Mysql的自习室预订系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【centos】vmware安装airflow流程

文章目录 1.下载系统https://mirrors.aliyun.com/centos/7/isos/x86_64/ 选择DVD20092.在VMware中&#xff0c;除了修改安装位置&#xff0c;其它选择默认安装centos73.用户名为root,登录4.网络适配器为桥接模式。5.使用命令消除显示器警告。6.安装anaconda6.1下载包&#xff1…

企业计算机服务器中了halo勒索病毒怎么处理,halo勒索病毒解密流程

随着网络技术的不断发展&#xff0c;网络在企业生产运营过程中发挥着重大作用&#xff0c;很多企业利用网络开展各项工作业务&#xff0c;网络也大大提高了企业的生产效率&#xff0c;但随之而来的网络数据安全问题成为众多企业关心的主要话题。近日&#xff0c;云天数据恢复中…

50个前端实战项目之04:隐藏的搜索小组件

大家好&#xff0c;我是宝哥。 今天讲50个前端实战项目之04&#xff1a;隐藏的搜索小组件。 源码下载地址 https://github.com/bradtraversy/50projects50days/tree/master/hidden-search 前端实战项目系列正在更新&#xff1a;04/50 01&#xff1a;可展开卡片02&#xff1a;进…

按键精灵纯本地离线文字识别插件

目的 按键精灵是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但按键精灵是不包含图色功能&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要讲解下…

Docker in Docker:深入解析与实战应用

Docker in Docker&#xff1a;深入解析与实战应用 一、引言 随着容器化技术的日益普及&#xff0c;Docker已经成为开发、测试、部署应用的标配工具。而在某些特定的场景下&#xff0c;如持续集成/持续部署&#xff08;CI/CD&#xff09;流水线中&#xff0c;我们可能需要在Do…

400 Bad Request问题

总结&#xff1a;请求路径写错了 400 问题 原地址&#xff0c;deleteSetmeal的参数应该改为param 更改请求地址正确后即可

靶场分享反弹shell

1、存在反弹shell命令的java代码文件Exploit.java&#xff0c;通过版本为1.8的jdk工具进行编译&#xff0c;生成Exploit.class文件 2、在存在Exploit.class文件的目录下开启http服务&#xff0c;让开启ldap服务端的工具marshalsec-0.0.3-SNAPSHOT-all.jar来访问这个文件 3、使用…

Spring IoCDI (1)

目录 一、IoC & DI入门 1、Spring是什么 &#xff08;1&#xff09;什么是容器&#xff1f; &#xff08;2&#xff09;什么是IoC&#xff1f; 二、IoC介绍 1、传统程序开发 2、解决方案 3、IoC程序开发 4、IoC优势 三、DI介绍 通过前面的学习&#xff0c;我们知…

Python语言的类和对象的基础

在 Python 中&#xff0c;类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;是面向对象编程的核心概念。类是用来创建对象的蓝图或模板&#xff0c;它定义了对象的属性和方法&#xff1b;对象是类的实例&#xff0c;具有类定义的属性和方法。本文将介绍 Py…

QPS(Queries Per Second)和TPS(Transactions Per Second)的介绍和区别

QPS&#xff08;Queries Per Second&#xff09;和TPS&#xff08;Transactions Per Second&#xff09;是衡量计算系统性能的两个指标&#xff0c;它们分别代表了系统每秒可以处理的查询数和事务数。虽然这两个术语在某些情况下可以互换使用&#xff0c;但它们在技术上有所区别…

OpenCV 开源的计算机视觉和机器学习软件库

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它包含了许多用于图像处理、计算机视觉和机器学习的通用算法。这个库最初由Intel开发,但现在已经成为一个全球性的社区项目,由许多贡献者共同维护和发展。 OpenCV的主要特点和优势包…

Day30:热帖排行、生成长图、将文件上传到云服务器、优化热门帖子列表、压力测试

热帖排行 不同的算分方式&#xff1a; 只存变化的帖子到redis中&#xff0c;每五分钟算一次分&#xff0c;定时任务 存redis 构建redis键 //统计帖子分数 //key:post:score -> value:postId public static String getPostScoreKey() {return PREFIX_POST SPLIT "…

公众号/小程序 开发模式切换

开发公众号/小程序 模式切换 https://ke.qq.com/course/6033257/14616022822424425#term_id106263577

软件架构设计模式:微服务与单体架构的比较

在软件开发领域&#xff0c;架构设计模式是指导如何组织应用程序代码和服务的基本方法。微服务架构和单体架构是两种常见的架构模式&#xff0c;它们各有优势和劣势&#xff0c;适用于不同的项目需求和团队结构。以下是微服务与单体架构的比较&#xff1a; ### 单体架构 单体…

如何进行APP下载分发?

进行APP软件分发主要涉及以下几个步骤&#xff1a; 准备应用程序&#xff1a;首先&#xff0c;开发人员需要确保应用程序已经经过完整的测试和质量保证&#xff0c;包括功能测试、用户体验测试、性能测试等&#xff0c;以确保其稳定性和可靠性。同时&#xff0c;打包应用程序&…

Redis(Jedis和SpringBoot整合Redis)

文章目录 1.Jedis1.介绍2.环境配置1.创建maven项目2.pom.xml引入依赖3.新建一个包并创建一个文件 3.Jedis远程连接到Redis1.Redis放到服务器可以连接的前提条件2.为Redis设置密码1.编辑配置文件2.找到 requirepass3.设置密码为root4.重启Redis&#xff0c;在shutdown的时候报错…

算法入门<一>:C++各种排序算法详解及示例源码

1、排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 1.1 评价维度 运行效率&#xff1a;我们期望排序算法的时间复杂度尽量低&#xf…