2024.2.22力扣每日一题——根据前序和后序遍历序列构建二叉树

2024.2.22

      • 题目来源
      • 我的题解
        • 方法一 分治思想

题目来源

力扣每日一题;题序:889

我的题解

方法一 分治思想

题解参考:官方题解
令 nn为二叉树的节点数目,那么根据前序遍历与后序遍历的定义,preorder[0] 与 postorder[n−1] 都对应二叉树的根节点。获取根节点后,需要划分根节点的左子树与右子树,考虑两种情况:

  • 原二叉树的根节点的左子树不为空,那么 preorder[1]对应左子树的根节点
  • 原二叉树的根节点的左子树为空,那么 preorder[1] 对应右子树的根节点。

对于以上两种情况,无法区分 preorder[1]到底是哪种情况。但是对于第二种情况,将原二叉树的右子树移到左子树后得到的二叉树的前序遍历数组与后序遍历数组与原二叉树相同,所以只需要考虑第一种情况。因为二叉树的值互不相同,可以在 postorder 中找到 postorder[k]=preorder[1],那么左子树的节点数目为 k+1。基于此,可以对 preorder 和 postorder进行分治处理,即将 preorder 划分为根节点、左子树节点和右子树节点三个部分,postorder也划分为左子树节点、右子树节点和根节点三个部分。那么问题划分为:

  • 根据左子树节点的前序遍历与后序遍历数组构造二叉树;
  • 根据右子树节点的前序遍历与后序遍历数组构造二叉树。

同时当节点数目为 1 时,对应构造的二叉树只有一个节点。可以递归地对问题进行求解,就可得到构造的二叉树。

时间复杂度:O(n)
空间复杂度:O(n)

public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {Map<Integer,Integer> map=new HashMap<>();//为了减少遍历后序序列,使用哈希表存储for(int i=0;i<postorder.length;i++){map.put(postorder[i],i);}return createTree(preorder,postorder,0,preorder.length-1,0,postorder.length-1,map);}
public TreeNode createTree(int[] preorder,int[] postorder,int preL,int preR,int postL,int postR,Map<Integer,Integer> map){if(preL>preR||postL>postR)return null;if(preL==preR)return new TreeNode(preorder[preL]);int val=preorder[preL];//下一个在前序中的根节点在后序中的位置int index=map.get(preorder[preL+1]);//左子树的节点数int left=index-postL+1;TreeNode root=new TreeNode(val);root.left=createTree(preorder,postorder,preL+1,preL+left,postL,index,map);root.right=createTree(preorder,postorder,preL+left+1,preR,index+1,postR-1,map);return root;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

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

相关文章

halcon形态学开运算

1、原理 先腐蚀后膨胀&#xff0c;既能像腐蚀操作一样消除突出噪声&#xff0c;同时又能保持原来图像的尺寸。 2、halcon代码 dev_open_file_dialog (read_image, default, default, Selection) read_image (Image, Selection) rgb1_to_gray (Image, GrayImage) threshold (…

JavaEE SSM框架学习——MacOS Eclipse环境搭建

MacOS环境搭建 安装Homebrew Homebrew是一个包管理器&#xff0c;我们可以通过它来安装许多软件 首先打开Homebrew中文官网(brew.sh/zh-cn) 如图所示&#xff0c;复制下面那行命令到你的Macbook终端 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ho…

针对 qt的sqlite加密数据库sqlitecipher插件QtCipherSqlitePlugin

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 文章目录 简介编译安装使用可视化工具查看完结 简介 在客户端存储…

通俗易懂:MySQL中如何设置只读实例并确保数据一致性?

在MySQL中设置只读实例主要应用于构建高可用性和扩展性的数据库环境&#xff0c;通常是为了分担读取负载或者用于备份和灾难恢复。以下是创建MySQL只读实例并确保数据一致性的基本步骤&#xff1a; 1. 创建并配置只读实例 - 主从复制设置 - 首先&#xff0c;你需要有一个主数…

太绝了!34张思维导图搞定Web安全知识架构

推荐关注 越来越多的朋友开始了解网络安全&#xff0c;但是不知道从哪里下手&#xff0c;网上的资源也很散乱&#xff0c;没有头绪&#xff0c;经常做无用功。 今天给大家分享几份网络安全思维导图&#xff0c;非常适合零基础入门或想进一步学习的小伙伴。 注&#xff1a;文…

leetcode 不同路径

62. 不同路径 问题描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…

【数据处理包Pandas】DataFrame数据选择的基本方法

目录 一、选择行/列&#xff08;一&#xff09;读取文件&#xff08;二&#xff09;选择行&#xff08;三&#xff09;选择列&#xff08;四&#xff09;选择多行多列 二、带条件筛选&#xff08;一&#xff09;startswith()方法&#xff08;二&#xff09;mean()方法&#xff…

本地运行github上下载的项目--接Git入门篇

1.了解项目 这是一个基于Spring Boot 和 Mybatis Plus 构建的Java项目&#xff0c;很经典的外卖项目&#xff0c;参考b站的黑马瑞吉外卖。 2.构建项目 SpringBoot项目&#xff0c;首先下载一些常见的项目要求的组件。然后配置如下&#xff1a; 看README&#xff0c;在阅读该…

如何查找局域网内连接设备的IP地址?

如何查找局域网内连接设备的IP地址? 第一种方法:通过CMD指令 在电脑开始菜单中找到运行,点击打开,输入CMD,然后回车,如下图所示, 如下图所示,输入ipconfig/all,然后回车, 如下图所示,此时会扫描出所有的连接设备的IP地址、MAC地址以及网关等信息, 这时候在cmd命令窗…

设置浏览器声音外放,其他声音耳机里放

需求描述&#xff1a; 我想在耳机里听歌&#xff0c;浏览器里的声音外放 找到这个面板 让浏览器的声音输出设为&#xff0c;扬声器

超图打开不同格式的dem文件

dem&#xff0c;数字高程模型&#xff1b; dem文件的后缀是什么? 有*.dem格式的&#xff0c;也有Raster&#xff0c;ASCII和Tiff类型的。Raster类型的是一个raster文件夹里面有很多不同格式的文件共同组成了DEM文件的内容。ASCII类型的是个txt文件。Tiff类型的也是一个文件夹…

SAP_PP模块相关底表

计划独立需求 PBIM物料独立需求PBED独立需求数据PBHI独立需求历史记录PBID计划独立需求指标预留/计划订单  RKPF 凭证抬头:预留RESB预留/依赖需求AFKOPP订单标题数据订单AFPO订单行项目PLAF计划订单生产订单  AUFK 订单主数据AFPO订单行项目AFKO订单抬头数据AFFL工作订单顺序…

Linux-command not found问题

一、telnet命令 1.检查telnet是否有安装 #有输出说明已安装&#xff0c;如果没有输出则没有安装 rpm -qa telnet #安装telnet yum install -y telnet #执行检查命令 [rootlocalhost ~]# rpm -qa telnet [rootlocalhost ~]# #安装telnet [rootlocalhost ~]# yum install -y tel…

Learning Discriminative Representations for Skeleton Based Action Recognition

标题&#xff1a;基于骨架的动作识别的学习判别性表示 原文链接&#xff1a;Learning Discriminative Representations for Skeleton Based Action Recognition (thecvf.com) 源码链接&#xff1a;https://github.com/zhysora/FR-Head 发表&#xff1a;CVPR 摘要 最近&…

面试题:MySQL 优化篇

定位慢查询 &#x1f496; 开源工具 调试工具&#xff1a;Arthas&#xff08;阿尔萨斯&#xff09;运维工具&#xff1a;Prometheus&#xff08;普罗米修斯&#xff09;、Skywalking &#x1f496; MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关 slow_query_log1 # 设置慢…

代码随想录算法训练营第25天|216.组合总和III |17.电话号码的字母组合

216.组合总和III 如果把 组合问题理解了&#xff0c;本题就容易一些了。 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;和组合问题有啥区别&#xff1f;回溯算法如何剪枝&#xff1f;| LeetCode&#xff1a;216.组合总和III_哔哩哔哩_bilibili class Soluti…

k8s入门到实战(七)—— 回顾:使用yaml文件配置pv、pvc、configmap部署mysql服务

实战&#xff1a;部署 mysql 服务 回顾加深 pv、pvc、configmap 删除所有 deployment、pv、pvc、configmap、StorageClass创建一个 nsf 挂载目录给 mysql mkdir -p /nfs/data/mysql创建 yaml 文件mysql-server.yaml # 创建pv apiVersion: v1 kind: PersistentVolume metadat…

vue——computed和methods的区别

computed和methods在Vue.js中都是用于处理数据和逻辑的方法&#xff0c;但它们之间存在一些重要的区别。 缓存机制&#xff1a;computed属性是基于它们的依赖进行缓存的。只有当它的相关依赖发生改变时才会重新计算。这意味着只要计算属性依赖的响应式属性没有发生变化&#x…

黑马鸿蒙笔记 3

目录 11.ArkUI组件-Column和Row 12.ArkUI组件-循环控制 13.ArkUI组件-List 14.ArkUI组件-自定义组件 15.ArkUI组件-状态管理State装饰器 16.ArkUI组件-状态管理-任务统计案例 17.ArkUI组件-状态管理-PropLinkProvideConsume 11.ArkUI组件-Column和Row Colum和Row的交叉…

QT-飞机水平仪图标

QT-飞机水平仪图标 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include <stdio.h> #include <stdlib.h> #include <string.h>#include <QtCore> #include <QtGui> #include <QDebug> #include <QTableWidget&g…