【LeetCode-中等题】114. 二叉树展开为链表

文章目录

    • 题目
    • 方法一:前序遍历(构造集合) + 集合(构造新树)
    • 方法二:原地构建
    • 方法三:前序遍历--迭代(构造集合) + 集合(构造新树)

题目

在这里插入图片描述

方法一:前序遍历(构造集合) + 集合(构造新树)

 List<TreeNode> res = new ArrayList<>();public void flatten(TreeNode root) {dfs(root);for(int i  = 0 ; i <res.size() ; i++){if(i == res.size()-1){//处理最后一个节点res.get(i).left = null;res.get(i).right = null;break;}res.get(i).left = null;res.get(i).right = res.get(i+1);}}//前序遍历public void dfs(TreeNode root) {if(root == null ) return ;res.add(root);dfs(root.left);dfs(root.right);}

方法二:原地构建

  1. 将左子树插入到右子树的地方
  2. 将原来的右子树接到左子树的最右边节点
  3. 考虑新的右子树的根节点,一直重复上边的过程,直到新的右子树为 null
public void flatten(TreeNode root) {while(root !=null){//左子树为 null,直接考虑下一个节点if (root.left == null) {root = root.right;} else {// 找左子树最右边的节点TreeNode  pre = root.left;while(pre.right !=null){pre =pre.right;}//将原来的右子树接到左子树的最右边节点pre.right = root.right;// 将左子树插入到右子树的地方root.right = root.left;root.left = null;// 考虑下一个节点root = root.right;}}}

在这里插入图片描述

方法三:前序遍历–迭代(构造集合) + 集合(构造新树)

 public void flatten(TreeNode root) {List<TreeNode> res = new ArrayList<>();Deque<TreeNode> stack = new LinkedList<>();while(!stack.isEmpty() || root != null){while(root != null) {res.add(root);stack.push(root);root = root.left;}root = stack.pop();root = root.right;}for(int i  = 0 ; i <res.size() ; i++){if(i == res.size()-1){//处理最后一个节点res.get(i).left = null;res.get(i).right = null;break;}res.get(i).left = null;res.get(i).right = res.get(i+1);}}

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

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

相关文章

Java 读取TIFF JPEG GIF PNG PDF

Java 读取TIFF JPEG GIF PNG PDF 本文解决方法基于开源 tesseract 下载适合自己系统版本的tesseract &#xff0c;官网链接&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 2. 下载之后安装&#xff0c;安装的时候选择选择语言包&#xff0c;我选择了中文和英文 3.…

【技术】视频云存储/安防监控视频/智能分析网关V3裸土未覆盖/苫盖算法详解

随着经济的发展和建筑工地的增多&#xff0c;对于土堆的裸露情况实时监测和管理变得尤为重要。为了解决这一问题&#xff0c;TSINGSEEE青犀AI智能分析网关V3的裸土未苫盖算法就能很好地解决。 AI算法模型可以实时识别路面/建筑工地中的土堆是否裸露&#xff0c;将工地、道路等…

模拟电子技术基础学习笔记三 PN结

采用不周的掺杂工艺&#xff0c;将P型半导体与N型半导体制作在同一块硅片上&#xff0c;在它们的交界面就形成PN结。 扩散运动 物质总是从浓度高的地方向浓度低的地方运动&#xff0c;这种由于浓度差而产生的运动称为扩散运动。 空间电荷区 - 耗尽层 漂移运动 在电场力的作…

Matlab论文插图绘制模板第110期—水平双向柱状图

在之前的文章中&#xff0c;分享了很多Matlab柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来看一种特殊的柱状图&#xff1a;水平双向柱状图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下…

探索Java集合框架—数据结构、ArrayList集合

一、背景介绍 Java集合的使用相信大家都已经非常得心应手&#xff0c;但是我们怎么做到知其然&#xff0c;更知其所以然这种出神入化的境界呢&#xff1f;我们揭开集合框架底层神秘面纱来一探究竟 目录 一、背景介绍 二、思路&方案 数据结构是什么&#xff1f; 数据结…

HTML基础--标签

目录 列表标签 有序列表 type属性 有序列表嵌套 无序列表 type属性 无序列表嵌套 常见应用场景 表格标签 表格展示效果 表格属性 表格单元格合并 单元格合并属性 列表标签 HTL作为构建网页内容的标记语言&#xff0c;提供了多种列表标签&#xff0c;用于在网页中展…

mysql通过.frm和.ibd 文件恢复数据库

问题背景&#xff1a;由于强制在服务关闭mysql导致部分数据表以及数据丢失 如下图只有.frm .ibd的文件为我的问题文件 查找不到表结构和表数据目录D:XXXX\mysql-5.7.24-winx64\data\mydata 从frm文件中恢复表结构 先把原来的数据备份一次 避免过程中出错 先备份之前数据的.fr…

工作中提高CSS的编写效率,可以多用这三个CSS伪类

:where 基本使用 :where() CSS 伪类函数接受选择器列表作为它的参数&#xff0c;将会选择所有能被该选择器列表中任何一条规则选中的元素。 以下代码&#xff0c;文本都会变成 yellow 颜色 :where(div p) span {color: yellow; }<div class"test-div"><…

书单制作方法详细步骤分享,想学的小伙伴看过来

如果你是一个热爱阅读的人&#xff0c;那么制作一份书单可能是一件有趣和有用的事情。在这篇文章中&#xff0c;我们将分享一些书单制作的方法和注意事项。 选择主题和书籍 首先&#xff0c;你需要选择一种主题&#xff0c;以便你可以按照主题来选择书籍。选择一个你感兴趣的主…

《人工智能算法图解》书籍分享(包邮送书)

文章目录 人工智能介绍书籍分享抽奖包邮送书 人工智能介绍 人工智能算法是一种能够模拟人类智能行为的计算机算法。它通过分析和处理大量的数据&#xff0c;利用机器学习、深度学习和自然语言处理等技术&#xff0c;实现自主学习、推理和决策的能力。 人工智能算法的发展经历…

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用&#xff08;如果不是现在&#xff0c;可能会在将来&#xff09;&#xff0c;因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…

白鲸开源 DataOps 平台加速数据分析和大模型构建

作者 | 李晨 编辑 | Debra Chen 数据准备对于推动有效的自助式分析和数据科学实践至关重要。如今&#xff0c;企业大都知道基于数据的决策是成功数字化转型的关键&#xff0c;但要做出有效的决策&#xff0c;只有可信的数据才能提供帮助&#xff0c;随着数据量和数据源的多样…