[LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
- 3
- / \
- 9 20
- / \
- 15 7
return its level order traversal as:
- [
- [3],
- [9,20],
- [15,7]
- ]
层序遍历二叉树是典型的广度优先搜索 BFS 的应用,但是这里稍微复杂一点的是,要把各个层的数分开,存到一个二维向量里面,大体思路还是基本相同的,建立一个 queue,然后先把根节点放进去,这时候找根节点的左右两个子节点,这时候去掉根节点,此时 queue 里的元素就是下一层的所有节点,用一个 for 循环遍历它们,然后存到一个一维向量里,遍历完之后再把这个一维向量存到二维向量里,以此类推,可以完成层序遍历,参见代码如下:
解法一:
- class Solution {
- public:
- vector<vector<int>> levelOrder(TreeNode* root) {
- if (!root) return {};
- vector<vector<int>> res;
- queue<TreeNode*> q{{root}};
- while (!q.empty()) {
- vector<int> oneLevel;
- for (int i = q.size(); i > ; --i) {
- TreeNode *t = q.front(); q.pop();
- oneLevel.push_back(t->val);
- if (t->left) q.push(t->left);
- if (t->right) q.push(t->right);
- }
- res.push_back(oneLevel);
- }
- return res;
- }
- };
下面来看递归的写法,核心就在于需要一个二维数组,和一个变量 level,关于 level 的作用可以参见博主的另一篇博客 Binary Tree Level Order Traversal II 中的讲解,参见代码如下:
解法二:
- class Solution {
- public:
- vector<vector<int>> levelOrder(TreeNode* root) {
- vector<vector<int>> res;
- levelorder(root, , res);
- return res;
- }
- void levelorder(TreeNode* node, int level, vector<vector<int>>& res) {
- if (!node) return;
- if (res.size() == level) res.push_back({});
- res[level].push_back(node->val);
- if (node->left) levelorder(node->left, level + , res);
- if (node->right) levelorder(node->right, level + , res);
- }
- };
Github 同步地址:
https://github.com/grandyang/leetcode/issues/102
类似题目:
Binary Tree Level Order Traversal II
Binary Tree Zigzag Level Order Traversal
Binary Tree Vertical Order Traversal
Average of Levels in Binary Tree
N-ary Tree Level Order Traversal
参考资料:
https://leetcode.com/problems/binary-tree-level-order-traversal/
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历的更多相关文章
- 102. Binary Tree Level Order Traversal二叉树层序遍历
网址:https://leetcode.com/problems/binary-tree-level-order-traversal/ 参考:https://www.cnblogs.com/grand ...
- [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- LeetCode 102. Binary Tree Level Order Traversal 二叉树的层次遍历 C++
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- Leetcode 102 Binary Tree Level Order Traversal 二叉树+BFS
二叉树的层次遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...
- leetcode 102.Binary Tree Level Order Traversal 二叉树的层次遍历
基础为用队列实现二叉树的层序遍历,本题变体是分别存储某一层的元素,那么只要知道,每一层的元素都是上一层的子元素,那么只要在while循环里面加个for循环,将当前队列的值(即本层元素)全部访问后再执行 ...
- 【LeetCode】102. Binary Tree Level Order Traversal 二叉树的层序遍历 (Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://lee ...
- Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- leetcode 102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
随机推荐
- javascript判断mp3是否播放完
javascript判断mp3是否播放完 var audio=document.getElementById('audio'); if(audio){ audio.loop = false; audi ...
- Srinath总结 架构师们遵循的 30 条设计原则
作者:Srinath 翻译:贺卓凡,来源:公众号 ImportSource Srinath 通过不懈的努力最终总结出了 30 条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构 ...
- C#动态创建单例类的对象
单例类 public class SnappingClass : ISnappingEnvironment, IExtension { // private static readonly Snapp ...
- 部署 asp.net 网站到 Azure
部署asp.net网站到Azure 前言 前些天一直在写一个单页面web应用程序,终于完成了,于是考虑发布到云服务器.本人没有AWS账号,遂本打算使用谷歌云.参考文档后发现官方文档给出的方式为在vis ...
- 2019年ASP.NET Core学习路线
- [先决条件] + C# + Entity Framework + ASP.NET Core + SQL 基础知识 - [通用开发技能] + 学习 GIT, 在 GitHub 中创建开源项目 + 掌 ...
- 腾讯WeTest亮相—腾讯全球数字生态大会现场
2019年5月21-23日腾讯全球数字生态大会在云南昆明滇池国际会展中心顺利召开. 此次大会上万人到场参与,大会由主峰会.分论坛.数字生态专题展会以及腾讯数字生态人物颁奖盛典四大板块构成.作为腾讯战略 ...
- 如何在linux CentOS 上安装chrome 谷歌浏览器?
获得linux命令的root权限:http://blog.csdn.net/mddy2001/article/details/76521101. 更改密码在终端中输入:sudo passwd root ...
- OC-加载h5富文本的代码,并计算高度
参考文章: 加载富文本的h5代码:https://zhidao.baidu.com/question/1510839173546014340.html 计算富文本的高度:https://zhidao. ...
- Arcgis CreateFishnet工具,生成到FileGDB中要素类的格网大小不一致
我的第一篇博客!哈哈 最近在做一些关于创建渔网的工作,发现一些问题,做个总结. 1.问题描述:如图1,设置好渔网的必要参数,输出目录为gdb里的矢量图层,(行列数比较大,渔网的地理范围较小),输出的格 ...
- JAVAWEB复习笔记-day02
1.CSS样式优先级 优先级:由上到下,由外到内.优先级越来越高 2.css选择器 html标签选择器 class选择器(.) id选择器(#) 3.优先级 style属性>id选择器>c ...