Leetcode-每日一题【114.二叉树展开为链表】

题目

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
 

示例 1:

输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]


示例 2:

输入:root = []
输出:[]


示例 3:

输入:root = [0]
输出:[0]

提示:

  • 树中结点数在范围 [0, 2000] 内
  • -100 <= Node.val <= 100

解题思路

首先带大家回顾一下二叉树的后序遍历

class Node {int val;Node left;Node right;Node(int val) {this.val = val;}
}public class BinaryTree {/*** 后序遍历*/public void postorderTraversal(Node root) {if (root != null) {postorderTraversal(root.left);postorderTraversal(root.right);System.out.print(root.val + " ");}}
}

首先,定义了一个 Node 类表示二叉树的节点。节点包含了一个整型的 val 值,以及左右两个子节点的引用。
然后,定义了 BinaryTree 类,该类包含了一个方法 postorderTraversal,用于实现后序遍历。
后序遍历的顺序是:先遍历左子树,然后遍历右子树,最后遍历根节点。
如果二叉树为空,则直接返回。否则,先输出左子树的值,然后递归遍历右子树和根节点。

回顾了二叉树的后序遍历后,我们来看一下这道题 

1.我们利用递归来解决这个问题,也就是二叉树的遍历思想,在还没操作节点右子树前,不能破坏该节点的右子树指向。所以采用后序遍历。

2.将root的右子树先存在 temp 节点中,然后令root.right = root.left ,不要忘记要将root.left节点置空,之后我们对root节点进行判断若root节点还存在右子树,我们就令 root = root.right ,直到找到最后一个右子树,将temp中保存的之前的右子树接在最后一个右子树的右边即可。

代码实现

class Solution {public void flatten(TreeNode root) {if(root == null){return;}flatten(root.left);flatten(root.right);TreeNode temp = root.right;root.right = root.left;root.left = null;while(root.right != null) root = root.right;root.right = temp;}
}

测试结果

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

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

相关文章

JavaEE——Spring中存取Bean的注解

目录 一、存储Bean对象 1、定义 2、存储方式 &#xff08;1&#xff09;、类注解 【1】、Controller&#xff08;控制器存储&#xff09; 【2】、Service&#xff08;服务存储&#xff09; 【3】、Repository&#xff08;仓库存储&#xff09; 【4】、Component&#xf…

9个可用于图片转文本的最佳免费 OCR 软件

光学字符识别 (OCR) 软件可帮助将不可编辑的文档格式&#xff08;例如 PDF、图像或纸质文档&#xff09;转换为可编辑和可搜索的机器可读格式。 OCR 应用程序通常用于从 PDF 和图像中捕获文本&#xff0c;并将文本转换为可编辑格式&#xff0c;例如 Word、Excel 或纯文本文件。…

Unity小游戏——武士打怪兽(总)

Unity小游戏——武士击杀小怪兽&#xff08;无限滚动的背景&#xff09;_七七喝椰奶的博客-CSDN博客 Unity小游戏——无限滚动的背景的改良_七七喝椰奶的博客-CSDN博客 Unity小游戏——怪物出现模式的管理_七七喝椰奶的博客-CSDN博客 Unity小游戏——武士和怪物的碰撞检测_七…

uniapp页面通信学习笔记

1、利用url传参进行通讯 A页面向B页面传递参数 uni.navigateTo({ url: test/test?id1&url encodeURIComponent(https://dcloud.io) }); B页面接收A页面传递的参数 export default { onLoad: function (option) { //option为object类型&#xff0c;会序列化上个页面…

将Windows的文件打包为Linux、Ubuntu可打开的格式

设置共享文件夹具体操作 设置共享文件夹 上述这篇文章完整讲述了如何设置一个可以在Windows及虚拟机之间互传文件的文件夹 7zip下载地址 Download 打包具体操作 a. 安装7-ZIP以后&#xff0c;直接在你想要打包的文件上点右键菜单&#xff0c;会有一个7-ZIP的子菜单栏&#…

STM32 HEX文件和BIN文件格式区别keil中的配置与生成

一、区别 HEX 文件: 是包括地址信息的,在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符3和字符F,每个字符需要一个BYTE…

【LeetCode每日一题】——946.验证栈序列

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 栈 二【题目难度】 中等 三【题目编号】 946.验证栈序列 四【题目描述】 给定 pushed 和 p…

C++OpenCV(6):图像阈值操作

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像阈值化 图像阈值化 阈值又叫临界值&#xff0c;是指一个效应能够产生的最低值或最高值。 例如我们选择的阈值为125&#xff0c;则…

[SQL挖掘机] - union/union all 使用注意事项

因为当使用union和union all操作符时&#xff0c;有一些注意事项需要考虑&#xff1a; 1. 列数和数据类型匹配&#xff1a; 要使用union或union all合并结果集&#xff0c;两个或多个查询的 select 语句必须返回相同数量和类型的列。确保每个查询返回相同的列数&#xff0c;并…

WPF实战学习笔记12-创建备忘录接口

创建备忘录接口 添加文件 新建文件 MyToDo.Api ./Controllers/MemoController.cs ./Service/IMemoService.cs ./Service/MemoService.cs MyToDo.Share ./Parameters/QueryParameter.cs QueryParameter.cs 查询参数类 using System; using System.Collections.Generic…

智能网关实现混凝土搅拌机无人自动化

“以前的搅拌站生产时&#xff0c;是需要人工巡检的&#xff0c;运送物料和搅拌时产生的大量粉尘污染和噪音&#xff0c;让工人苦不堪言。但是如果有了物联网搅拌站监测系统智慧园区项目落地后&#xff0c;工人也不用去现场忍受噪音和粉尘了。” 行业痛点 传统模式下的混泥土…

机器学习实战11-基于K-means算法的文本聚类分析,生成文本聚类后的文件

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍机器学习实战11-基于K-means算法的文本聚类分析&#xff0c;生成文本聚类后的文件。文本聚类分析是NLP领域的一个核心任务&#xff0c;通过将相似的文本样本分组&#xff0c;可以帮助我们发现隐藏在文本数据中的模式和结…

力扣题库刷题笔记73--矩阵置零

1、题目如下&#xff1a; 2、个人Python代码实现 3、个人Python代码思路 a、声明2个空数组p、q&#xff0c;用于存放值为0的元素matrix[i][j]的下标 b、首先遍历二维数组matrix&#xff0c;找到值为0的元素matrix[i][j]&#xff0c;将下标i加入数组p&#xff0c;将下标j加入数…

在Android中使用新版proguard混淆器的方式

文章目录 一、Proguard混淆器二、新版混淆器使用方式(插件版)三、R8与proguard四、参考链接 一、Proguard混淆器 Proguard是Android开发时经常会用到的一个混淆工具&#xff0c;在Android SDK中已经集成了一个免费的Proguard版本&#xff0c;位于/tools/proguard目录中。对于A…

微信小程序-----刷新页面3种方式

微信小程序要实现页面刷新&#xff0c;简单的说就是在不同的地方重新执行 onLoad 周期函数。 需要注意在刷新时是否要初始化变量。因为小程序都是异步操作&#xff0c;所以很多时候&#xff0c;可能会造成服务器相应慢的问题&#xff0c;导致页面显示的时候会有延迟、造成闪烁的…

高通WLAN框架学习(37)-- TDLS(Tunneled Direct Link Setup)通道直接链路建立

一 TDLS概述 隧道直连设置(TDLS)基于IEEE 802.11z-2010IEEE标准802.11z标准(无线局域网介质访问控制(MAC)和物理层(PHY)规范。 TDLS允许与同一AP关联的设备之间建立直接链路。Wi-Fi Direct允许设备之间直接连接,而不需要AP。Wi-Fi联盟认证可用于IEEE 802.11a和802.11g设备的T…

[SQL挖掘机] - WHERE语句

介绍: 往往我们在获取数据的时候, 会有一些限制条件, 这些限制条件很多就是需要通过where进行体现. 当我们在进行数据库查询时, 有时候我们需要从表中筛选出符合特定条件的数据. 这时就可以使用 where 子句来添加一个条件, 以便只选择满足条件的数据行. where 子句用于在查询…

如何创建vue2,vue3项目

前提需安装node.js和Vue CLI node.js:https://nodejs.org/zh-cn Vue CLI&#xff1a; npm install -g vue/cli 如何创建一个vue2项目 &#xff08;1&#xff09; 使用cmd终端直接创建 进入到vue项目所创建的目录里&#xff08;我是直接创建在桌面上&#xff09; 选择vue2 …

入局元宇宙,所谓的无限可能到底在哪里?

最近的热点新闻表明&#xff0c;人们似乎认为元宇宙已经走向“死亡”。但实际上&#xff0c;市场应该重新定义对元宇宙的看法&#xff0c;以及正视它最大的机会所在——游戏领域。 1937年5月6日&#xff0c;一架名为兴登堡号的巨大氢能齐柏林飞艇飞临新泽西州曼彻斯特镇上空&a…

学好Linux的必经之路

学习动机的培养对于一个人学习习惯的形成有着重要的作用。当我们在学习某一个事物时&#xff0c;建立属于我们自己的学习方法&#xff0c;以此培养我们学习Linux系统的学习动机。 当前&#xff0c;Linux系统属于热门的计算机操作系统&#xff0c;因此学习Linux显得重要起来。同…