二叉树展开为链表的三种写法

二叉树展开为链表

在这里插入图片描述

链表头节点法
新建一个树形链表,前序遍历这个树,遍历到一个节点就往里插

class Solution {
    TreeNode dummyNode = new TreeNode(0,null,null);
    TreeNode p = dummyNode;
    public void flatten(TreeNode root) {
        if(root == null) return;
        //线序遍历这个树,然后往里插就完事了
        TreeNode l = root.left;
        TreeNode r = root.right;
        p.right = root;
        p.right.left = null;
        p=p.right;
        flatten(l);
        flatten(r);
        //再指回去
        root = dummyNode.right;
    }
}

连接法
每次找左子树最右的节点,然后连接即可

class Solution {
    //每一次找左子树最右的节点,然后连接
    public void flatten(TreeNode root) {
        TreeNode cur = root;
        while(cur!=null){
            if(cur.left!=null){
                TreeNode leftMaxRight = cur.left;
                while(leftMaxRight.right!=null)
                    leftMaxRight = leftMaxRight.right;
                leftMaxRight.right = cur.right;
                cur.right = cur.left;
                cur.left =null;    
            }
            cur = cur.right;
        }
    }
}

倒着前序遍历法
这里有一种非常好的思路,就是在类里面定义一个变量,这个变量作为全局的变量,所有递归都能访问到,这样子就可以找到这个递归前一个节点了。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hi-Net:用于多模态MR图像合成的混合融合网络

Hi-Net: Hybrid-Fusion Network for Multi-Modal MR Image Synthesis Hi-Net:用于多模态MR图像合成的混合融合网络背景贡献实验方法the modality-specific network(模态特定网络)multi-modal fusion networkmulti-modal synthesis network 损…

【投稿优惠|稳定出版】2023年信息科学和大数据应用国际会议 (ICISBDA 2023)

2023年信息科学和大数据应用国际会议 (ICISBDA 2023) 2023 International Conference on Information Science and Big Data Applications (ICISBDA 2023) 一、会议简介 🎉🎉🎉🎉🎉&…

规则引擎专题---1、什么是规则引擎

什么是规则引擎,为了更易大家理解,我们这边先抛出一个问题。 问题 现有一个在线申请信用卡的业务场景,用户需要录入个人信息,如下图所示: 通过上图可以看到,用户录入的个人信息包括姓名、性别、年龄、学…

Fiddler抓包工具之fiddler的介绍及安装

Fiddler简介 Fiddler是比较好用的web代理调试工具之一,它能记录并检查所有客户端与服务端的HTTP/HTTPS请求,能够设置断点,篡改及伪造Request/Response的数据,修改hosts,限制网速,http请求性能统计&#xff…

Codeforces Round #911 (Div. 2) A~E

A.Cover in Water(思维) 题意: 有一个 1 n 1 \times n 1n的水池,里面有些格子可以加水,有些格子是被堵上的,你可以进行以下两种操作: 1.往一个空的格子里加水 2.移除一个有水的格子中的水&a…

论文阅读_AI生成检测_Ghostbuster

英文名称: Ghostbuster: Detecting Text Ghostwritten by Large Language Models 中文名称: 捉鬼人:检测大语言模型生成的文本 文章: http://arxiv.org/abs/2305.15047 代码: https://github.com/vivek3141/ghostbuster 作者: Vivek Verma,Eve Fleisig&a…

人工智能基础创新的第二增长曲线

编者按:2023年是微软亚洲研究院建院25周年。借此机会,我们特别策划了“智启未来”系列文章,邀请到微软亚洲研究院不同研究领域的领军人物,以署名文章的形式分享他们对人工智能、计算机及其交叉学科领域的观点洞察及前沿展望。希望…

docker-compose脚本编写及常用命令

安装 linux DOCKER_CONFIG/usr/local/lib/docker/cli-plugins sudo mkdir -p $DOCKER_CONFIG/cli-plugins sudo curl -SL https://521github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose sudo c…

VSCode下载安装教程+安装插件

一、vscode下载安装 1.打开 官网:https://code.visualstudio.com/Download 2.选择跟你电脑相对应的版本下载,我是win10,所以选择如下: 3.下载到你想要保存的目录下 4.下载完成后打开目录,双击安装包 5. 同意&#xff…

Linux 磁盘分区处理

最近实施过程中遇到客户提供给我们的服务器操作系统和Docke容器环境都已经安装完成,但磁盘的分区没有进行整理好。磁盘总共270G,系统安装分配了60G,剩余未创建分配需要处理。由于分区情况每家不一样,但大致流程都是相同的&#xf…

React项目使用NProgress作为加载进度条

React项目使用NProgress作为加载进度条 0、效果1、react安装依赖2、使用3.进度条颜色设置 文档参考:https://zhuanlan.zhihu.com/p/616245086?utm_id0 0、效果 如下,可全局在页面顶部有一条进度条 1、react安装依赖 yarn add nprogress通过以上安装…

uni-app+ts----微信小程序锚点定位 、自动吸顶、滚动自动选择对应的锚点(点击tab跳转对应的元素位置)

uni-app----微信小程序锚点定位 、自动吸顶、滚动自动选择对应的锚点&#xff08;点击tab跳转对应的元素位置&#xff09; html代码部分 重点是给元素加入【 :id“‘item’ item.id”】 <view class"radiusz bg-white pt-[30rpx] z-[999]"><u-tabs:list&q…

matlab 无迹卡尔曼滤波

1、内容简介 略 26-可以交流、咨询、答疑 2、内容说明 无迹卡尔曼滤波 无迹卡尔曼滤波 无迹卡尔曼滤波 3、仿真分析 %该文件用于编写无迹卡尔曼滤波算法及其测试 %注解&#xff1a;主要子程序包括&#xff1a;轨迹发生器、系统方程 % 测量方程、UKF滤波器 %----…

YOLOv8优化策略:SENetV2,squeeze和excitation全面升级,效果优于SENet | 2023年11月最新成果

🚀🚀🚀本文改进: SENetV2,squeeze和excitation全面升级,作为注意力机制引入到YOLOv8,放入不同网络位置实现涨点 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.SENetV2 论文:https://arxiv.org/…

2023开发者必备iOS开发工具

​ 工欲善其事&#xff0c;必先利其器。进行开发工作时&#xff0c;利用并熟练使用恰当的工具可以让工作效率得到大幅度提高。下边会介绍一些在进行iOS开发工作时常用的一些工具&#xff0c;本文并不对其进行展开&#xff0c;对使用方法及工作原理感兴趣的同学可以自行进行更深…

6.9 Windows驱动开发:内核枚举进线程ObCall回调

在笔者上一篇文章《内核枚举Registry注册表回调》中我们通过特征码定位实现了对注册表回调的枚举&#xff0c;本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回调以及ThreadObCall线程回调&#xff0c;之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用…

理解位运算的规则

关卡名 理解位运算的规则 我会了✔️ 内容 1.理解位运算的基本规则 ✔️ 2.理解移位的原理以及与乘除的关系 ✔️ 3.掌握位运算的常用技巧 ✔️ 在学习位操作之前&#xff0c;我们先明确数据在计算机中怎么表示的。我们明确原码、反码和补码的概念和表示方法&#xff0c;之…

2023年营养保健品市场销售数据分析(京东数据运营-京东数据产品):10月销额同比增长67%

如今&#xff0c;随着健康经济、颜值经济的兴起&#xff0c;越来越多的年轻人加入养生大军&#xff0c;成为营养保健品市场上的一股新力量&#xff0c;带动市场扩容。在养生年轻化、人口老龄化等多重因素的驱动下&#xff0c;营养保健品市场增长强劲。 根据鲸参谋电商数据分析平…

RocketMQ(四):重复消费、消息重试、死信消息的解决方案

RocketMQ系列文章 RocketMQ(一)&#xff1a;基本概念和环境搭建 RocketMQ(二)&#xff1a;原生API快速入门 RocketMQ(三)&#xff1a;集成SpringBoot RocketMQ(四)&#xff1a;重复消费、消息重试、死信消息的解决方案 目录 一、重复消费1、消息重复的情况2、MySql唯一索引…