【leetcode面试经典150题】75. 二叉树展开为链表(C++)

news2025/1/6 20:52:54

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)

【题目描述】

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

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

【示例一】

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

【示例二】

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

【示例三】

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

【提示及数据范围】

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

【代码】

// 方法一:前序遍历

class Solution {
public:
    void flatten(TreeNode* root) {
        vector<TreeNode*> l;
        preorderTraversal(root, l);
        int n = l.size();
        for (int i = 1; i < n; i++) {
            TreeNode *prev = l.at(i - 1), *curr = l.at(i);
            prev->left = nullptr;
            prev->right = curr;
        }
    }

    void preorderTraversal(TreeNode* root, vector<TreeNode*> &l) {
        if (root != NULL) {
            l.push_back(root);
            preorderTraversal(root->left, l);
            preorderTraversal(root->right, l);
        }
    }
};


// 方法二:前序遍历和展开同步进行

class Solution {
public:
    void flatten(TreeNode* root) {
        if (root == nullptr) {
            return;
        }
        auto stk = stack<TreeNode*>();
        stk.push(root);
        TreeNode *prev = nullptr;
        while (!stk.empty()) {
            TreeNode *curr = stk.top(); stk.pop();
            if (prev != nullptr) {
                prev->left = nullptr;
                prev->right = curr;
            }
            TreeNode *left = curr->left, *right = curr->right;
            if (right != nullptr) {
                stk.push(right);
            }
            if (left != nullptr) {
                stk.push(left);
            }
            prev = curr;
        }
    }
};

// 方法三:寻找前驱节点

class Solution {
public:
    void flatten(TreeNode* root) {
        TreeNode *curr = root;
        while (curr != nullptr) {
            if (curr->left != nullptr) {
                auto next = curr->left;
                auto predecessor = next;
                while (predecessor->right != nullptr) {
                    predecessor = predecessor->right;
                }
                predecessor->right = curr->right;
                curr->left = nullptr;
                curr->right = next;
            }
            curr = curr->right;
        }
    }
};

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

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

相关文章

LINUX系统编程:动静态库的制作

目录 1.为什要有库 2.库的制作 2.1静态库的制作 1.为什要有库 主要有两个原因 提高效率 隐藏源码 例&#xff1a;我写了一个函数&#xff0c;我想让别人使用&#xff0c;但是并不像让使用者看到我写的代码&#xff0c;就可以把我的代码制作成一个库&#xff0c;提供给使用…

了解ASK模块STX883Pro和超外接收模块SRX883Pro的独特之处 STX883Pro模块具有以下特点:

高发射功率&#xff1a;STX883Pro具有较高的发射功率&#xff0c;可实现长距离的信号传输&#xff0c;适用于需要覆盖广泛区域的应用场景。 高频率稳定性&#xff1a;具备稳定的频率输出&#xff0c;确保信号传输的可靠性和一致性&#xff0c;避免频率漂移导致的通信故障。 大…

【07-探索性数据分析(EDA):利用Scikit-learn高效掌握数据特性】

文章目录 前言为何EDA至关重要?使用Scikit-learn进行EDA数据导入与初步检查缺失值检测数据可视化特征分布与转换特征选择多变量分析未来的步骤结论前言 探索性数据分析(EDA)是数据科学的基石之一,它使我们在建模之前可以深入了解数据的本质。本篇博文会带你了解如何使用Sci…

Kafka 消费者应用解析

目录 1、Kafka 消费方式 2、Kafka 消费者工作流程 2.1、消费者工作流程 2.2、消费组者说明 1、消费者组 2、消费者组初始化流程 3、消费者 API 3.1、独立消费者-订阅主题 3.2、独立消费者-订阅分区 3.3、消费组 4、分区的分配策略以及再平衡 4.1、Range 策略 1、R…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.6-1.8

目录 第一门课&#xff1a;第二门课 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)…

基于JavaWEB的学生考勤管理系统(含论文)

本系统是用Java语言写的&#xff0c;基于JavaWEB的学生考勤管理系统 主要有三大模块&#xff0c;学生&#xff0c;教师和管理员模块&#xff0c;功能如下&#xff1a; 学生模块 教师模块&#xff1a; 管理员模块

Allure精通指南(05)定制化报告内容(环境信息、图标、缺陷类别)

文章目录 Allure 自定义测试环境信息Allure 自定义缺陷类别信息Allure 自定义图标步骤一步骤二步骤三 Allure 自定义测试环境信息 步骤 1&#xff1a;创建 environment.properties 文件 在项目根目录或任何其他不会被--clean-alluredir参数影响的目录下创建 environment.proper…

Redis事务以及Watch监听(通俗易懂)

在执行事务时&#xff0c;要不全执行&#xff0c;要不全不执行。Redis 事务我个人认为不是严格意义上的事务&#xff0c;只是用于帮助用户在一个步骤中执行多个命令。它是通过multi[mʌlti] 表示开启事务&#xff0c;EXEC执行事务&#xff0c;discard 丢失任务。当我们开启事务…

动手学深度学习14 数值稳定性+模型初始化和激活函数

动手学深度学习14 数值稳定性模型初始化和激活函数 1. 数值稳定性2. 模型初始化和激活函数3. QA **视频&#xff1a;**https://www.bilibili.com/video/BV1u64y1i75a/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 **电子书&#xff1a;**https://zh-v…

如何利用人工智能加速临床试验

如何利用人工智能加速临床试验 Matthew Hutson 著 李升伟 译 从研究设计到患者招募&#xff0c;研究人员正在研究如何运用AI技术加速临床试验过程。 几十年来&#xff0c;计算能力遵循摩尔定律&#xff08;Moore’s law&#xff09;&#xff0c;以可预测的速度前进。集成电路上…

Linux:服务器间同步文件的脚本(实用)

一、功能描述 比如有三台服务器&#xff0c;hadoop102、hadoop103、hadoop104&#xff0c;且都有atguigu账号 循环复制文件到所有节点的相同目录下&#xff0c;且脚本可以在任何路径下使用 二、脚本实现 1、查看环境变量 echo $PATH2、进入/home/atguigu/bin目录 在该目录下…

结合创新!LSTM+Transformer新成果登Nature,精度高达95.65%

推荐一个能发表高质量论文的好方向&#xff1a;LSTM结合Transformer。 LSTM通过门控机制有效捕捉序列中的长期依赖关系&#xff0c;防止梯度消失或爆炸&#xff0c;在处理具有长期依赖性的时间序列数据时有显著优势。而Transformer通过自注意力和多头注意力机制全面捕捉序列依…

OpenHarmony实战开发-媒体查询 (@ohos.mediaquery)

概述 媒体查询作为响应式设计的核心&#xff0c;在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景&#xff1a; 针对设备和应用的属性信息&#xff08;比如显示区域、深浅色、分辨率&#xff09;&#xff0…

21.基础乐理-等音调扩展篇、为何一共十五个大调

首先 等音调 的概念是基于 等音 的概念&#xff0c;比如下图中的音名&#xff1a;因为用的按键相同&#xff0c;音名不同&#xff0c;所以被称为等音调 然后音名一共有35个&#xff0c;如下图&#xff1a;所以在理论上它会有35个大调&#xff0c;但是人总是倾向于选择简单、简洁…

一个不太好用的弹出层jquery.colorbox第二次点击不出来的解决方法

使用jquery.colorbox的时候第一次正常显示&#xff0c;但第二次的时候不显示。 需要先移除&#xff0c;再重新点击即可&#xff0c;代码如下 $.colorbox.remove();$.colorbox({href: url,iframe: true,width: options.width || 800,height: options.height || 600 });

企业应该如何选择适合的ERP?

今天跟大家聊一点不一样的。一直写了很多关于企业内部系统集成的文章和案例&#xff0c;很多人私信我又或者是很多客户在做数字化选型的时候会问到我一个问题&#xff0c;那就是“ERP改如何去选择&#xff0c;金蝶跟用友该怎么选&#xff1f;”。因为做集成这个领域也有十多年了…

宁盾2FA双因子认证助力某城商行TCE平台达到密评要求

《密码法》规定&#xff0c;法律、行政法规和国家有关规定要求使用商用密码进行保护的关键信息基础设施&#xff0c;其运营者应当使用商用密码进行保护&#xff0c;自行或者委托商用密码检测机构开展商用密码应用安全性评估。商用密码应用安全性评估&#xff08;简称&#xff1…

小红书KOL推广应该注意什么?

小红书上的KOL往往具有极大影响力&#xff0c;可以协助品牌快速构建产品形象&#xff0c;并短时间内为品牌带来大量热度和搜索量&#xff0c;引导消费。品牌通过与达人进行合作推广&#xff0c;也可以借鉴达人的影响力&#xff0c;提高品牌的信任度和转化率。 不过网红达人推广…

SpringBoot源码阅读2-自动配置

SpringBoot源码阅读2-自动配置 在传统的Spring应用中&#xff0c;开发者需要手动配置一系列Web应用的核心组件&#xff0c;例如DispatcherServlet用于处理请求分发、ViewResolver用于视图解析、CharacterEncodingFilter用于字符编码过滤等。 然而在SpringBoot中只要引入了spr…

4 -26

4-26 1 英语单词100个一篇六级翻译 2 div 4 补题目 3 概率论期中卷子一张&#xff0c;复习复习。 4 备课ing 晚上出去炫饭&#xff0c;串串香&#xff0c;无敌了。 中间一些模拟题是真的恶心&#xff0c;思维题是真的想不到&#xff0c;感觉自己就是一个废物呢。 1.是将一个数…