1. 二叉树的层序遍历
    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
    示例 1:
    输入:root = [3,9,20,null,null,15,7]
    输出:[[3],[9,20],[15,7]]
    示例 2:
    输入:root = [1]
    输出:[[1]]
    示例 3:
    输入:root = []
    输出:[]
    提示:
    树中节点数目在范围 [0, 2000] 内
    -1000 <= Node.val <= 1000

代码:
class Solution {
public:
vector<vector> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
if(root!=NULL) q.push(root);
vector<vector> result;
while(!q.empty()){
int size=q.size();
vector v;
for(int i=0;i<size;i++){
TreeNode* node=q.front();
q.pop();
v.push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
result.push_back(v);
}
return result;

}

};


`107. 二叉树的层序遍历 II
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]
示例 2:

输入:root = [1]
输出:[[1]]
示例 3:

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

提示:

树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000

代码:
class Solution {
public:
vector<vector> levelOrderBottom(TreeNode* root) {
queue<TreeNode*> q;
if(root!=NULL) q.push(root);
vector<vector> result;
while(!q.empty()){
int size=q.size();
vector v;
for(int i=0;i<size;i++){
TreeNode* node=q.front();
q.pop();
v.push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
result.push_back(v);
}
reverse(result.begin(),result.end());
return result;
}
};

思路:在原本的基础上加了一个逆序

199. 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:

输入: [1,null,3]
输出: [1,3]
示例 3:

输入: []
输出: []

提示:

二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100
第一反应:如果没有左视图我是不认可的,绝对还有一道左视图
思路:因为只需要右视图,每层只有一个,所以把每层最后一个元素push到result就可以
代码:
class Solution {
public:
vector rightSideView(TreeNode* root) {
queue<TreeNode*> q;
if(root!=NULL) q.push(root);
vector result;
while(!q.empty()){
int size=q.size();
for(int i=0;i<size;i++){
TreeNode* node=q.front();
q.pop();
if(i==size-1) result.push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
}
return result;
}
};

637. 二叉树的层平均值
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。
示例 2:

输入:root = [3,9,20,15,7]
输出:[3.00000,14.50000,11.00000]

提示:

树中节点数量在 [1, 104] 范围内
-231 <= Node.val <= 231 - 1

思路:增加一个double求下试试看:
代码:
class Solution {
public:
vector averageOfLevels(TreeNode* root) {
queue<TreeNode*> q;
if(root!=NULL) q.push(root);
vector result;
while(!q.empty()){
int size=q.size();
double average=0;
for(int i=0;i<size;i++){
TreeNode* node=q.front();
q.pop();
average=average+node->val;
if (i==size-1){
average=average/size;
result.push_back(average);
}
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
}
return result;
}
};


429. N 叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1:

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

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

提示:

树的高度不会超过 1000
树的节点总数在 [0, 10^4] 之间
思路:默默看了一眼孩子代码:
代码:
class Solution {
public:
vector<vector> levelOrder(Node* root) {
queue<Node*> q;
if(root!=NULL) q.push(root);
vector<vector> result;
while(!q.empty()){
int size=q.size();
vector v;
for(int i=0;i<size;i++){
Node* node=q.front();
q.pop();
v.push_back(node->val);
for(int j=0;jchildren.size();j++){
if (node->children[j]) q.push(node->children[j]);
}
}
result.push_back(v);
}
return result;
}
};
打的时候居然莫名其妙报错了。于是重新打了一遍

515. 在每个树行中找最大值
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

示例1:

输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
示例2:

输入: root = [1,2,3]
输出: [1,3]

提示:

二叉树的节点个数的范围是 [0,104]
-231 <= Node.val <= 231 - 1

思路:需要注意最大值要取INT_MIN
代码:
class Solution {
public:
vector largestValues(TreeNode* root) {
queue<TreeNode*> q;
if(root!=NULL) q.push(root);
vector result;
while(!q.empty()){
int size=q.size();
int max=INT_MIN;
for(int i=0;i<size;i++){
TreeNode* node=q.front();
q.pop();
if (node->val>max){
max=node->val;
}
if (i==size-1){
result.push_back(max);
}
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
}
return result;
}
};

吃个饭下午继续

leetcode 层序遍历之我要打十个(上)相关推荐

  1. 力扣题目——103. 二叉树的锯齿形层序遍历

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行 ...

  2. 力扣题目——107. 二叉树的层序遍历 II

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根 ...

  3. LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 97交错字符串(动态规划) LeetCode 98验证 ...

  4. 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)

    二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...

  5. LeetCode 515. 在每个树行中找最大值(层序遍历)

    1. 题目 您需要在二叉树的每一行中找到最大的值. 示例: 输入: 1/ \3 2/ \ \ 5 3 9 输出: [1, 3, 9] 来源:力扣(LeetCode) 链接:https://leetco ...

  6. LeetCode 1161. 最大层内元素和(层序遍历)

    1. 题目 给你一个二叉树的根节点 root.设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推. 请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 ...

  7. LeetCode 993. 二叉树的堂兄弟节点(层序遍历)

    文章目录 1. 题目 2. 解题 2.1 层序遍历 2.2 递归查找 1. 题目 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同 ...

  8. LeetCode 958. 二叉树的完全性检验(层序遍历)

    1. 题目 给定一个二叉树,确定它是否是一个完全二叉树. 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的 ...

  9. LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)

    文章目录 1. 题目 2. 解题 2.1 前序遍历 2.2 层序遍历 1. 题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过 ...

最新文章

  1. easyui datagrid 表格动态隐藏部分列的展示
  2. 如果常数项没有经过显著性检验_Cg,Cgk 能代替偏倚显著性检验?
  3. exp/expdp中query参数的使用
  4. 电路知识--认识原理图(二)
  5. 20165115 第二周学习总结
  6. Linux常用C函数-接口处理篇(网络通信函数)
  7. 原生支付url参数错误_小程序支付
  8. 大数据集群搭建之Linux的安装(一)
  9. java观察者模式本质_6.[研磨设计模式笔记]观察者模式
  10. 在Wireshark中过滤数据包
  11. Android提权root漏洞,【转】结合init源码剖析android root提权漏洞(CVE
  12. (一)云计算OpenStack介绍
  13. python最大的社区_python 最大流
  14. linux命令大全之ss命令详解(获取socket统计信息)
  15. 广州坐标系转换大地2000_实用帖 | 从地方坐标系到2000国家大地坐标系的转换方法...
  16. 11种方法检测软件可靠性
  17. linux 查看文件哈希码,计算文件哈希值
  18. 教育技术学专业属于计算机类么,教育技术学是什么专业
  19. 面试时,你会问面试官哪些问题?
  20. JavaScript简餐——关于盗用构造函数

热门文章

  1. nil、NIL以及null间的联系和区别
  2. 理解golang中什么是nil
  3. Mysql8.0安装以及连接navicat部分bug解决
  4. 网页鼠标滚轮事件(滚滚屏)的获取及理解
  5. DNS初体验之完美邂逅
  6. jQuery——插件
  7. 视频编解码之帧场处理方法
  8. 【webgl】绘制一个三角形
  9. 湖Tohopekaliga佛罗里达赶上Lunker低音
  10. linux系统如何连接wf,Kali Linux系统连接Wifi无线网络命令: