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

server/2024/10/17 16:25:59/

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/server/132526.html

相关文章

【ArcPy】在pycharm中调试arcpy工具代码

目标 查找训练深度学习模型报错情况&#xff0c;并查看训练模型下载地址 操作示例 代码调用工具 代码是从arcgis官网训练深度学习模型工具网页&#xff0c;python模块下复制的。数据自行准备 # Import system modules import arcpy from arcpy.ia import * # Check ou…

目标检测系统【环境详细配置过程】(CPU版本)

&#xff08;如果你使用的是笔记本电脑&#xff0c;没有比较好的GPU&#xff0c;可以配置CPU运行环境&#xff09; 链接&#xff1a;上百种【基于YOLOv8/v10/v11的目标检测系统】目录&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff09; 1.安装…

Django CORS跨域支持

服务端安装跨域组件 pip install django-cors-headers 添加子应用&#xff0c;settings/dev.py&#xff0c;代码&#xff1a; INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,djan…

各种类型的身份认证页面,还不会设计,说不过去了吧。

身份认证页面是用户与系统建立信任的关键环节。一个设计良好的身份认证页面&#xff0c;不仅要确保安全性&#xff0c;还要兼顾用户体验。 简洁明了的布局&#xff0c;清晰的指示&#xff0c;让用户能够快速理解认证流程。合理的色彩搭配和字体选择&#xff0c;既不显得单调乏…

ES-入门聚合查询

url 请求地址 http://192.168.1.108:9200/shopping/_search {"aggs": { //聚合操作"price_group":{ //名称,随意起名"terms":{ //分组"field": "price" //分组字段}}} } 查询出来的结果是 查询结果中价格的平均值 {&q…

振弦式渗压计压力计算出现负值怎么办?

振弦式渗压计压力计算出现负值怎么办&#xff1f;振弦式渗压计是一种广泛应用于水利、土木工程及地质勘探等领域的传感器&#xff0c;主要用于测量土体、岩石或混凝土结构中孔隙水压力的变化。其高精度、长期稳定性及良好的环境适应性使其成为水工建筑物安全监测的重要工具。然…

大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

程序员人生:热爱、挑战与行业未来的深度探讨

1. 好奇与热爱&#xff1a;程序员的起点 1.1 初识编程&#xff1a;一切源于好奇 几乎所有程序员的旅程都是从好奇心开始的。不同于其他职业&#xff0c;程序员的入门门槛相对较低&#xff0c;尤其是在如今互联网资源丰富的时代&#xff0c;只要有一台电脑和网络连接&#xff…