当前位置: 首页 > news >正文

【代码随想录day 12】 力扣 102.107.199. 二叉树的层序遍历

视频讲解:https://www.bilibili.com/video/BV1GY4y1u7b2/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#_637-%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%B9%B3%E5%9D%87%E5%80%BC
力扣题目:https://leetcode.cn/problems/binary-tree-level-order-traversal/
https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/
https://leetcode.cn/problems/binary-tree-right-side-view/

关于二叉树的层序遍历,需要用到队列这一数据结构,当遍历到一层时,将这一层节点的左节点和右节点压入队列中,然后下一次循环中弹出一个父节点再压入两个子节点,要注意que.size()是随着层数不断变化的。
假设又有个15个元素的4层二叉树

               1/     \2         3/  \       /  \4     5     6     7/ \   / \   / \   / \8  9  10 11 12 13 14 15

那么每一次循环的队列元素如下所示:

1
23//1弹出,加入左右节点23
345//2弹出,加入左右节点45
4567//3弹出,加入左右节点67
56789
67891011
...
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode *> que;if(root!=NULL)que.push(root);vector<vector<int>> result;while(!que.empty()){int size = que.size();//printf("%d\n",size);vector<int> vec;for(int i=0;i<size;i++){TreeNode *node=que.front();que.pop();vec.push_back(node->val);if(node->left)que.push(node->left);if(node->right)que.push(node->right);}result.push_back(vec);}return result;}
};
  1. 二叉树的层序遍历 II这一题与其类似,只不过要求从下网上遍历,我们只需要将上一题的结果反转即可。
class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {queue<TreeNode *> que;if(root!=NULL) que.push(root);vector<vector<int>> result;while(!que.empty()){int size=que.size();vector<int> vec;for(int i=0;i<size;i++){TreeNode *node=que.front();que.pop();vec.push_back(node->val);if(node->left) que.push(node->left);if(node->right) que.push(node->right);}result.push_back(vec);}reverse(result.begin(),result.end());return result;}
};
  1. 二叉树的右视图,这一题要求只返回最右边的元素,我们判断便利的元素是否为本行最后一个元素即可。
class Solution {
public:vector<int> rightSideView(TreeNode* root) {queue<TreeNode *> que;if(root!=NULL) que.push(root);vector<int> result;while(!que.empty()){int size= que.size();for(int i=0;i<size;i++){TreeNode *node=que.front();que.pop();//如果是这一行最后一个元素,就存进去if(i==size-1) result.push_back(node->val);if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return result;}
};
http://www.dtcms.com/a/317730.html

相关文章:

  • 数据库设计方法详解
  • Spring之【初识AOP】
  • 应急响应linux
  • 英伟达算力卡巅峰对决:H100、A100与消费级显卡哪里找?
  • 数语科技登陆华为云商店,助力企业释放数据潜能
  • day20|学习前端
  • JavaScript 基础语法
  • 频数分布表:数据分析的基础工具
  • Adobe Analytics 数据分析平台|全渠道客户行为分析与体验优化
  • Qt 容器类详解:顺序容器与关联容器及其遍历方法
  • [LVGL] 配置lv_conf.h | 条件编译 | 显示屏lv_display
  • 组合模式(Composite Pattern)及其应用场景
  • 基于spring boot的个人博客系统
  • tkwebview-tkinter的web视图
  • 解决云服务器端口无法访问的方法
  • java学习 leetcode24交换链表节点 200岛屿数量 +一些开发任务
  • Redis(七):Redis高并发高可用(主从复制)
  • JP3-4-MyClub后台前端(二)
  • C++、STL面试题总结(三)
  • 考研408_数据结构笔记(第四章 串)
  • 第五十一章:AI模型服务的“百变面孔”:WebUI/CLI/脚本部署全解析
  • 功能安全和网络安全的综合保障流程
  • Transformers简单介绍 - 来源于huggingface
  • 虚幻GAS底层原理解剖五 (AS)
  • 从案例学习cuda编程——线程模型和显存模型
  • git 清理submodule
  • PowerShell部署Windows爬虫自动化方案
  • 【ArcGIS】分区统计中出现Null值且Nodata无法忽略的问题以及shp擦除(erase)的使用——以NDVI去水体为例
  • DevOps时代的知识基座革命:Gitee Wiki如何重构研发协作范式
  • Unity轻量观察相机