【LeetCode102. 二叉树的层序遍历】——层序遍历
102. 二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
输入:root = [1]
输出:[[1]]
输入: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. 二叉树的层序遍历】——层序遍历相关推荐
- 代码随想录算法训练营Day15|Leetcode102二叉树的层序遍历、Leetcode226翻转二叉树、Leetcode101对称二叉树
Day15打卡! 时长:2h 今日感想:今天主要学习了二叉树层次遍历的思路方法和应用.题目看似简单,实则有很多细节,有时间可以做做其他相似的推荐题目~ Leetcode102 二叉树的层序遍历 题目链 ...
- 常考数据结构与算法:二叉树的之字形层序遍历
题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...
- LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
103. 二叉树的锯齿形层序遍历 Ideas 首先得理解二叉树的层序遍历,它类似于广度优先搜索,在当前层搜索的时候,遍历到的每一个节点都要把它的所有孩子节点都添加到队列中. 然后我们要锯齿形遍历,可以 ...
- 牛客题霸 [二叉树的之字形层序遍历] C++题解/答案
牛客题霸 [二叉树的之字形层序遍历] C++题解/答案 题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20, ...
- 二叉树的之字形层序遍历
二叉树的之字形层序遍历 1.参考资料 https://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559 2.题目要求 题目描述 给定 ...
- 力扣题目——103. 二叉树的锯齿形层序遍历
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行 ...
- 二叉树遍历-层序-递归
层序遍历:按照层级,从上往下,从左到右.使用广度优先搜索算法. 定义一棵二叉树,遍历逻辑按照图中的层级依次进行遍历 按照层级划分,二叉树分为四级,如果把没有节点的用null节点进行填充,那么二叉树将变 ...
- 二叉树:先序遍历,中序遍历,后序遍历,层序/层次遍历
目录 二叉树 二叉树的递归遍历 先序递归遍历 中序递归遍历 后序递归遍历 二叉树的非递归遍历 先序遍历使用栈结构 中序遍历使用栈结构 后序遍历使用栈结构 中序遍历:(morris遍历)空间复杂度O(1 ...
- tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历
tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历 1. tree traversal (树的遍历) 1.1 深度优先搜索 ...
- 二叉树的锯齿形层序遍历
Leetcode:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) (leetcode-cn.com) 还是层序遍历的问题,只不过这里需要注意层数,从而选择是正序访问还是倒序访问. 时间 ...
最新文章
- 政务大数据共享难题的破解路径有哪些?
- python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
- C语言 —— sprintf()函数
- 解决EXECL单元格不可以填充颜色
- 开发中经常碰到的问题cookie和session问题,今天一并解决
- centos7.9使用ssh命令进行登陆云服务器
- 三个范式的定义与理解
- HTML DOCTYPE 标签 -- DTDs 文档类型声明
- python支持gui编程_Python GUI编程完整示例
- pandas plot label_Python+Pandas | 分析比特币与股票市场的关系
- 基于Socket网络编程基本步骤
- 测绘 绘图 计算机,20 机械测绘与计算机绘图 草图绘制范例 课件:草图绘制范例.pptx...
- Android系统教程PPT,Android教程之架构详解.ppt
- composer php中如何执行,composer怎么运行
- 计算机科学(Computer Science)到底学什么?
- HTTPS之TLS证书
- amd 2600 黑苹果 mojave
- 【C语言】自定义类型 结构体 枚举 联合
- nexus是java的插件吗_nexus-staging-maven-plugin 踩坑
- 从Le-Net到DenseNet到CliqueNet