102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

思考:

本题又是一种新的二叉树遍历方式,层序遍历,这种遍历方式其实较为简单,符合正常的遍历顺序。所以我们可以采用队列这种数据结构,运用其先进先出的特性进行遍历。

利用队列遍历:

本题要求按每一层遍历,所以我们采用for循环的形式,进行每一层的遍历。值得注意的是,随着结点加入队列中,队列的大小也会随之改变,所以在进行for循环之前,需要提前存储队列的大小size。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
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()){vector<int> childvector;//子容器,储存每一层遍历的结果int size = que.size();//记录队列当前大小for (int i = 0; i < size; i++){TreeNode* cur = que.front();que.pop();if (cur->left){que.push(cur->left);}if (cur->right){que.push(cur->right);}childvector.push_back(cur->val);}result.push_back(childvector);}return result;}
};

递归法:

当然,该题也可以使用递归法来实现,该题中,递归的终止条件为:遍历到空节点,此时说明已将所有结点遍历完毕,进行返回,结束递归。每轮递归中,利用depth记录层数,当进入新的一层时,创建新的子容器。

//递归法
class Solution {public:void order(TreeNode* cur, vector<vector<int>>& result, int depth){if (cur == nullptr) return;if (result.size() == depth) result.push_back(vector<int>());//添加子容器result[depth].push_back(cur->val);order(cur->left, result, depth + 1);order(cur->right, result, depth + 1);}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;int depth = 0;order(root, result, depth);return result;}
};

参考:代码随想录

往期回顾:
LeetCode144、145、94. 二叉树遍历
LeetCode18. 四数之和
LeetCode15. 三数之和
LeetCode383. 赎金信
LeetCode454. 四数相加 II
LeetCode1. 两数之和
LeetCode202. 快乐数
LeetCode350. 两个数组的交集 II
LeetCode349. 两个数组的交集
LeetCode1002. 查找共用字符

【LeetCode102. 二叉树的层序遍历】——层序遍历相关推荐

  1. 代码随想录算法训练营Day15|Leetcode102二叉树的层序遍历、Leetcode226翻转二叉树、Leetcode101对称二叉树

    Day15打卡! 时长:2h 今日感想:今天主要学习了二叉树层次遍历的思路方法和应用.题目看似简单,实则有很多细节,有时间可以做做其他相似的推荐题目~ Leetcode102 二叉树的层序遍历 题目链 ...

  2. 常考数据结构与算法:二叉树的之字形层序遍历

    题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...

  3. LeetCode Algorithm 103. 二叉树的锯齿形层序遍历

    103. 二叉树的锯齿形层序遍历 Ideas 首先得理解二叉树的层序遍历,它类似于广度优先搜索,在当前层搜索的时候,遍历到的每一个节点都要把它的所有孩子节点都添加到队列中. 然后我们要锯齿形遍历,可以 ...

  4. 牛客题霸 [二叉树的之字形层序遍历] C++题解/答案

    牛客题霸 [二叉树的之字形层序遍历] C++题解/答案 题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20, ...

  5. 二叉树的之字形层序遍历

    二叉树的之字形层序遍历 1.参考资料 https://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559 2.题目要求 题目描述 给定 ...

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

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

  7. 二叉树遍历-层序-递归

    层序遍历:按照层级,从上往下,从左到右.使用广度优先搜索算法. 定义一棵二叉树,遍历逻辑按照图中的层级依次进行遍历 按照层级划分,二叉树分为四级,如果把没有节点的用null节点进行填充,那么二叉树将变 ...

  8. 二叉树:先序遍历,中序遍历,后序遍历,层序/层次遍历

    目录 二叉树 二叉树的递归遍历 先序递归遍历 中序递归遍历 后序递归遍历 二叉树的非递归遍历 先序遍历使用栈结构 中序遍历使用栈结构 后序遍历使用栈结构 中序遍历:(morris遍历)空间复杂度O(1 ...

  9. tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历

    tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历 1. tree traversal (树的遍历) 1.1 深度优先搜索 ...

  10. 二叉树的锯齿形层序遍历

    Leetcode:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) (leetcode-cn.com) 还是层序遍历的问题,只不过这里需要注意层数,从而选择是正序访问还是倒序访问. 时间 ...

最新文章

  1. 政务大数据共享难题的破解路径有哪些?
  2. python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
  3. C语言 —— sprintf()函数
  4. 解决EXECL单元格不可以填充颜色
  5. 开发中经常碰到的问题cookie和session问题,今天一并解决
  6. centos7.9使用ssh命令进行登陆云服务器
  7. 三个范式的定义与理解
  8. HTML DOCTYPE 标签 -- DTDs 文档类型声明
  9. python支持gui编程_Python GUI编程完整示例
  10. pandas plot label_Python+Pandas | 分析比特币与股票市场的关系
  11. 基于Socket网络编程基本步骤
  12. 测绘 绘图 计算机,20 机械测绘与计算机绘图 草图绘制范例 课件:草图绘制范例.pptx...
  13. Android系统教程PPT,Android教程之架构详解.ppt
  14. composer php中如何执行,composer怎么运行
  15. 计算机科学(Computer Science)到底学什么?
  16. HTTPS之TLS证书
  17. amd 2600 黑苹果 mojave
  18. 【C语言】自定义类型 结构体 枚举 联合
  19. nexus是java的插件吗_nexus-staging-maven-plugin 踩坑
  20. 从Le-Net到DenseNet到CliqueNet

热门文章

  1. 数据分析实战一:教育课程案例线上平台数据分析
  2. 一、Python-劳务报酬计算器(新手练习)
  3. 管理者的人品的重要性
  4. 记离职同事给我们的建议之一:关于人员培养方面的思考
  5. 佳明手表APP开发系列01——简单汉化英文版
  6. intellij背景护眼色调节
  7. 北大邹磊:图数据库中的子图匹配算法
  8. word表批量处理小技巧(python+宏)
  9. VUE后台管理系统权限管理
  10. 浅入浅出linux中断子系统