题面

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

层序遍历二叉树,要求从上到下,从左到右,输出结果为二维vector。

样例

Given binary tree [3,9,20,null,null,15,7],

    3
/ \
9 20
/ \
15 7

return its level order traversal as:

[
[3],
[9,20],
[15,7]
]

算法

想法:还记得怎么进行层序遍历吗?结果是一个一维数组。现在的情景是要把每一层用一个单独的vector存起来,仅此而已。那么我们的首要问题就是,怎么解决“一层”的问题。

其实,我们在处理完上一层时,queue中就会只包含有本层的节点指针,那么我们计算queue.size(),然后只处理queue的前queue.size()个元素不就可以了吗?在处理其中每一个元素的时候,判空。非空的话,值压入vector,然后把左孩子和有孩子都再次压入queue,最后queue.pop()。处理完这一层,就把当前vector整个压入结果vector<vector<int>> res 中。

1. 根节点判空,若空,返回空vector<vector<int>> (); 不空,继续

2. 新建queue<TreeNode*> q, 和结果vector<vector<int>> res,根节点压入q中

3. 若q非空,while循环判断

新建vector。计算q元素个数,即为一层节点,逐个判空,若不空,值压入vector。然后把子节点压入q中,然后把它弹出queue。

处理完这层,若vector不空,整个压入res中。

4. 返回 res 结束。

源码

 /**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
 class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
//层序遍历
if(root == nullptr)
return vector<vector<int>> (); vector<vector<int>> res;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int size = q.size();
vector<int> tmp;
while(size--)
{
TreeNode* p = q.front();
if(p != nullptr)
{
tmp.push_back(p->val);
q.push(p->left);
q.push(p->right);
}
q.pop();
}
if(tmp.size() != )
res.push_back(tmp);
}
return res;
}
};

最新文章

  1. Windows 网络编程
  2. MyBatis入门案例、增删改查
  3. 利用paramiko模块实现堡垒机+审计功能
  4. 自学 web 前端人怎么找工作?
  5. 使用 PHP 7 给 Web 应用加速
  6. data-*属性——使用自定义属性的方式存储数据
  7. .net 动态编译解决考勤计算问题
  8. 菜鸟学习Hibernate——缓存
  9. [LeetCode] Remove Element 分析
  10. phpmyadmin 4.x 版本无法看到登录框的处理
  11. JavaScript之Chart.js图例(legend)
  12. NOI2005瑰丽华尔兹
  13. 【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)
  14. CCNA实验(4) -- EIGRP
  15. 闭包&amp;装饰器详解
  16. 设计模式笔记之一:MVP架构模式入门(转)
  17. PHP+MySQL 分页那点事
  18. 信用评分卡 (part 5 of 7)
  19. Bagging-Adaboost-RF的粗糙理解
  20. JSP基本_JavaBeans

热门文章

  1. AtomicInteger的CAS算法浅析
  2. 使用wsimport生成webservice客户端代码
  3. Linux (Ubuntu)提示ifconfig:找不到命令
  4. HTTP中的请求头和响应头属性解析
  5. LeetCode_189. Rotate Array
  6. 基于JOSE4J 实现的OAUTH TOKEN
  7. JQuery.BlockUI使用方法举例
  8. iOS-类似微信摇一摇
  9. Moq中判断方法是否被执行时,参数中有列表的情况
  10. FlappyBird