【LeetCode: 889. 根据前序和后序遍历构造二叉树 + DFS】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ DFS
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 889. 根据前序和后序遍历构造二叉树

⛲ 题目描述

给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。

如果存在多个答案,您可以返回其中 任何 一个。

示例 1:
在这里插入图片描述

输入:preorder = [1,2,4,5,3,6,7], postorder = [4,5,2,6,7,3,1]
输出:[1,2,3,4,5,6,7]
示例 2:

输入: preorder = [1], postorder = [1]
输出: [1]

提示:

1 <= preorder.length <= 30
1 <= preorder[i] <= preorder.length
preorder 中所有值都 不同
postorder.length == preorder.length
1 <= postorder[i] <= postorder.length
postorder 中所有值都 不同
保证 preorder 和 postorder 是同一棵二叉树的前序遍历和后序遍历

🌟 求解思路&实现代码&运行结果


⚡ DFS

🥦 求解思路
  1. 该题主要是通过前序和后序遍历来还原一颗二叉树,这也就导致这棵二叉树不一定是唯一的。
  2. 核心的思路:先在前序遍历中找到左子树的位置preorder[1],然后在后序遍历中找到对应的下标位置,对其加1得到左子树的大小,这就是突破点,根据左右子树分割前序和后序数组,左子树的前序数组取到的区间是[1,1+i),前序数组取到的区间是[1+i,n)。右子树的前序数组取到的区间是[0,i),前序数组取到的区间是[i,n-1)。对其左右子树递归这个过程,还原一颗二叉树。
  3. 有了基本的思路,接下来我们就来通过代码来实现一下递归和迭代的解法。
🥦 实现代码
/*** 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 constructFromPrePost(int[] preorder, int[] postorder) {int n = preorder.length;if (n == 0) {return null;}if (n == 1) {return new TreeNode(preorder[0]);}TreeNode root = new TreeNode(preorder[0]);for (int i = 0;; i++) {if (postorder[i] == preorder[1]) {i = i + 1;// 下标加1root.left = constructFromPrePost(Arrays.copyOfRange(preorder, 1, 1 + i),Arrays.copyOfRange(postorder, 0, i));root.right = constructFromPrePost(Arrays.copyOfRange(preorder, 1 + i, n),Arrays.copyOfRange(postorder, i, n - 1));break;}}return root;}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【Java程序设计】【C00280】基于Springboot的校友社交系统(有论文)

基于Springboot的校友社交系统&#xff08;有论文&#xff09; 项目简介项目简介项目获取开发环境项目技术运行截图 项目简介 项目简介 这是一个基于Springboot的校友社交系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页…

10.Halcon形态学膨胀,腐蚀,开运算,闭运算

膨胀:对边界点进行扩充,填充空洞&#xff0c;使边界向外部扩张的过程。 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 开运算: 先腐蚀后膨胀的过程称为开运算。 作用 : 去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积. 闭运…

企业级大数据安全架构(十一)Kerberos接入dophinscheduler

作者&#xff1a;楼高 建议将dophinscheduler集成到Ambari安装部署&#xff0c;在Ambari上面开启kerberos 1.安装准备 编译 从GitHub获取dolphinscheduler-1.3.9源码 git clone https://github.com/apache/dolphinscheduler.git -b 1.3.9-releasehttps://github.com/apache/…

解决Jenkins-2.396启动报错:Failed to start Jenkins Continuous Integration Server.

场景&#xff1a;现有环境已经使用Java 8在运行业务&#xff0c;安装Jenkins后启动报错。 原因&#xff1a;因为Jenkins-2.396 依赖于Java 11 版本才能启动。 解决方法&#xff1a; yum 安装Java11 yum install java-11-openjdk-devel java-11-openjdk 或者二进制安装java11修…

element导航菜单el-menu添加搜索功能

element导航菜单-侧栏&#xff0c;自带的功能没有搜索或者模糊查询。 找了找资料 找到一个比较可行的&#xff0c;记录一下&#xff1a; //index.vue的代码 <div style"overflow:auto"><el-menu :default-active"$route.path":default-openeds&…

如何让程序员过一个没有烦恼的假日

每逢假期、周末&#xff0c;总是被各种排障会和线上问题折磨&#xff0c;做什么都做不进去&#xff0c;也没法好好休息…… 常会听身边的同行们这样描述自己的假期。说实话&#xff0c;这感觉我可太熟悉不过了&#xff0c;因为这状态困扰了我好几年…… 不管你是正吃着火锅还是…

时域系统到频域响应的直观解析及数学推导

课本里经常有已知系统时域的差分方程&#xff0c;求系统的频率响应这样的题&#xff0c;老师会讲怎么带公式进去解决&#xff0c;怎么查表解决&#xff0c;但我们总时无法直观地理解这两种转换的特殊关联在哪里&#xff0c;这篇文章以FIR滤波器为例&#xff0c;不仅列出了课本里…

CHiME丨​MMCSG(智能眼镜多模态对话)

CHiME 挑战赛已经正式开启&#xff0c;今天分享下 CHiME 的子任务MMCSG(智能眼镜多模态对话)&#xff0c;欢迎大家投稿报名&#xff01; 赛事官网&#xff1a;https://www.chimechallenge.org/current/task3/index CHiME (Computational Hearing in Multisource Environments…

最新版opencv4.9安装介绍,基本图像处理详解

文章目录 一、什么是OpenCV &#xff1f;二. OpenCV 安装1. 下载地址2.安装命令&#xff1a;pip install opencv-python 三、图像基础1. 基本概念2. 坐标系3. 基本操作&#xff08;彩色图片&#xff09;&#xff08;1&#xff09;读取图片&#xff1a;cv2.imread( )&#xff08…

小程序--vscode配置

要在vscode里开发微信小程序&#xff0c;需要安装以下两个插件&#xff1a; 安装后&#xff0c;即可使用vscode开发微信小程序。 注&#xff1a;若要实现鼠标悬浮提示&#xff0c;则需新建jsconfig.json文件&#xff0c;并进行配置&#xff0c;即可实现。 jsconfig.json内容如…

vue3新特性-defineOptions和defineModel

defineOptions 背景说明&#xff1a; 有 <script setup> 之前&#xff0c;如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。 但是用了 <script setup> 后&#xff0c;就没法这么干了 setup 属性已经没有了&#xff0c;自然无法添加与其平…

【Java程序设计】【C00278】基于Springboot的数码论坛管理系统(有论文)

基于Springboot的数码论坛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的数码论坛系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、…

小程序生命周期解析(从概念、启动、运行、销毁到生命周期事件及场景的全面解析)

引言 在当今移动应用激烈竞争的时代&#xff0c;小程序作为一种轻量级、高效便捷的移动应用形式&#xff0c;逐渐成为用户和开发者的热门选择。小程序不仅以其小巧灵活的体积受到用户喜爱&#xff0c;更因为无需安装、即点即用的特性在移动应用领域取得了广泛的普及。随着小程…

三好夫人品牌喜获“爱你一万年.com”中文域名,开启数字化新篇章

三好夫人&#xff0c;以中文域名“爱你一万年.com”强化品牌情感联结&#xff0c;预示全新市场布局。 【北京&#xff0c;2024年2月23日讯】 —— 中国领先的旺夫养生茶品牌“三好夫人”今日宣布&#xff0c;成功注册“爱你一万年.com”中文域名&#xff0c;标志着公司在加强品…

亚马逊,速卖通,国际站测评补单的必要性与方法

亚马逊平台的规则与某宝有所不同。亚马逊平台没有产品推广引流和直通车等功能。而且&#xff0c;与某宝不同的是&#xff0c;亚马逊平台没有广告位和卖家客服。在某宝上&#xff0c;当我们选择款式和颜色时&#xff0c;通常会与卖家客服进行沟通。但在亚马逊上&#xff0c;没有…

深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】

深入探索pdfplumber&#xff1a;从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中&#xff0c;PDF文档是一种常见的格式。然而&#xff0c;要从PDF中提取信息并进行进一步的分析&#xff0c;我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

STM32控制max30102读取血氧心率数据(keil5工程)

一、前言 MAX30102是一款由Maxim Integrated推出的低功耗、高精度的心率和血氧饱和度检测传感器模块&#xff0c;适用于可穿戴设备如智能手环、智能手表等健康管理类电子产品。 该传感器主要特性如下&#xff1a; &#xff08;1&#xff09;光学测量&#xff1a;MAX30102内置…

2024生物发酵展带您领略视觉盛宴-东滤器材

参展企业介绍 东滤器材&#xff08;石家庄&#xff09;有限公司是一家专注于微孔膜产品、深层过滤产品、纳米纤维产品、一次性过滤产品开发和应用的高科技企业&#xff0c;并于2022年顺利通过河北省“高新技术企业”权威认证。 公司拥有近两千平米符合GMP规范的十万级净化车间…

springmvc基于springboot 的音乐播放系统 _7sdu8

这就意味着音乐播放系统的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的ymj排行榜、ymj音乐资讯等功能。 此系统设计主要采用的是JAVA语言来进行开发&#xff0c;JSP技术、采用SSM框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&…