LeetCode Hot100 | Day5 | 二叉树右视图二叉树展开为链表

news/2024/10/17 11:13:29/

LeetCode Hot100 | Day5 | 二叉树右视图&&二叉树展开为链表

文章目录

  • LeetCode Hot100 | Day5 | 二叉树右视图&&二叉树展开为链表
    • 199.二叉树的右视图
      • 1.递归遍历
      • 2.层序遍历
    • 114.二叉树展开为链表

199.二叉树的右视图

199. 二叉树的右视图 - 力扣(LeetCode)

完整代码:

1.递归遍历

来自于灵神的题解,我仅仅是看懂

遍历顺序:
中右左,因为收集的是右视图,我们要收集最右边的,先递归右子树,保证首次遇到的一定是最右边的,有人可能会好奇,这样的话,遍历左子树的时候会有不符合条件的答案进去,深度就是解决这个问题的

关键点:

深度首次遇到才会记录答案,这样避免了递归完右子树重新从根节点路过递归遍历左子树的时候,路过的重复深度的树层的树

这个在遍历完右子树后,如果左子树还有比右子树深度大的才会进入答案

class Solution {vector<int> ans;void dfs(TreeNode* node, int depth) {if (node == nullptr) {return;}if (depth == ans.size()) { // 这个深度首次遇到ans.push_back(node->val);}cout<<node->val<<endl;dfs(node->right, depth + 1); // 先递归右子树,保证首次遇到的一定是最右边的节点dfs(node->left, depth + 1);}public:vector<int> rightSideView(TreeNode* root) {dfs(root, 0);return ans;}
};

2.层序遍历

思路好想,代码也是模板,不多说了

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;queue<TreeNode*> q;if(root==nullptr)return res;q.push(root);while(!q.empty()){int size=q.size();vector<int> path;for(int i=0;i<size;i++){TreeNode *t=q.front();q.pop();path.push_back(t->val);if(t->left)q.push(t->left);if(t->right)q.push(t->right);}res.push_back(path);}return res;}
};

114.二叉树展开为链表

114. 二叉树展开为链表 - 力扣(LeetCode)

用一个vector把前序遍历结点存储一下,然后再把它串成链表

class Solution {
public:vector<TreeNode *> res;void tra(TreeNode *t){if(t==nullptr)return;res.push_back(t);tra(t->left);tra(t->right);}void flatten(TreeNode* root) {tra(root);for(int i=1;i<res.size();i++){res[i-1]->right=res[i];res[i-1]->left=nullptr;}return ;}
};

http://www.ppmy.cn/news/1539692.html

相关文章

400行程序写一个实时操作系统(九):替换FreeRTOS的内存管理算法

前言 通过前面几章&#xff0c;笔者带领大家完成了内存管理算法的编写。 我们完成的内存管理算法&#xff0c;被称为小内存管理算法。我们也可以将它作为一个库&#xff0c;在后续的嵌入式开发中&#xff0c;使用我们自己编写的malloc&#xff0c;不仅效率会更高&#xff0c;…

目标检测系统中需要【重新训练模型】说明

上百种【基于YOLOv8/v10/v11的目标检测系统】目录&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff09;-CSDN博客 目标检测系统操作说明【用户使用指南】&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff09;-CSDN…

上海亚商投顾:沪指冲高回落 成渝板块近50股涨停

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡分化&#xff0c;三大指数涨跌不一。成渝本地股集体爆发&#xff0c;成都路桥、重庆建工、四川金…

R语言绘制聚类热图

聚类热图是一种直观的数据可视化工具。它以矩形彩色图表的形式呈现数据矩阵&#xff0c;每个单元格颜色对应特定数值&#xff0c;通常从低值的冷色调到高值的暖色调渐变。常应用于多个领域&#xff0c;如生物学中分析基因表达、蛋白质相互作用和生物群落&#xff1b;金融领域用…

易基因:DNA甲基化+转录组综合分析鉴定调控猪睾丸发育的潜在基因|附经典研究思路

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 DNA甲基化在调控基因表达和睾丸发育中发挥重要作用。WGBS 和 RNA-Seq 数据综合分析可以绘制DNA甲基化与基因表达关系的全面图谱&#xff0c;从而鉴定受甲基化影响的关键基因。如对小鼠睾…

蓝桥杯刷题--幸运数字

幸运数字 题目: 解析: 我们由题目可以知道,某个进制的哈沙德数就是该数和各个位的和取整为0.然后一个幸运数字就是满足所有进制的哈沙德数之和.然后具体就是分为以下几个步骤 1. 我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数 2. 我们在main方法里面调用…

【Flutter】Dart:类

在 Dart 中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程的核心概念之一&#xff0c;提供了一种封装数据和功能的方式。理解 Dart 中的类以及它的相关特性是开发 Flutter 应用的基础。本教程将深入介绍 Dart 中类的定义、属性、构造函数、方法、接口、Mixin 以及…

Lumerical学习——分析工具(Analysis tools)

一、分析工具和模拟环境&#xff08;Analysis tools and the simulation environment&#xff09; 模拟计算完成后&#xff0c;模拟计算数据紧接着写到模拟工程文件中&#xff1b;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…