题面

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;
}
};

leetcode-102.层序遍历二叉树(正序)· BTree的更多相关文章

  1. 数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出

    用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: #include <iostream> #include &l ...

  2. Python3 解析XML 层序遍历二叉树

    Python3 解析XML 层序遍历二叉树 keyword : python3, xml, xml.dom.minidom, 层序遍历, 层次遍历, 二叉树 part1 问题描述 面对如下 XML 文 ...

  3. LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树

    Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...

  4. 层序遍历二叉树 完整层序重建二叉树 python

    给定一个二叉树的完整的层次遍历序列(包含所有节点,包括空节点),利用这个序列生成一颗二叉树. 我们首先来看怎样对一颗二叉树进行层序遍历,下图所示的二叉树层次遍历的结果为[a,b,c,d,e],在这个过 ...

  5. UVa 122 Trees on the level (动态建树 && 层序遍历二叉树)

    题意  :输入一棵二叉树,你的任务是按从上到下.从左到右的顺序输出各个结点的值.每个结 点都按照从根结点到它的移动序列给出(L表示左,R表示右).在输入中,每个结点的左 括号和右括号之间没有空格,相邻 ...

  6. Binary Tree Level Order Traversal,层序遍历二叉树,每层作为list,最后返回List<list>

    问题描述: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ...

  7. Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树

    题目描述: Binary Tree Zigzag Level Order Traversal AC Rate: 399/1474 My Submissions Given a binary tree, ...

  8. PAT A1147 Heaps (30 分)——完全二叉树,层序遍历,后序遍历

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  9. PAT A1102 Invert a Binary Tree (25 分)——静态树,层序遍历,先序遍历,后序遍历

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

随机推荐

  1. avro-1.8.1 serialize BigDecimal and Short error fix.

    1. create mysql table like CREATE TABLE `test` ( `a` ) ', `b` ,) DEFAULT NULL, `c` ,) DEFAULT NULL ) ...

  2. Delphi分割字符串函数Split源码

    function TStringHelper.Split(const Separator: array of string; Count: Integer; Options: TStringSplit ...

  3. C# 后台POST和GET 获取数据

    C# 后台POST和GET 获取数据 , data.Length);     newStream.Close();     HttpWebResponse myResponse = (HttpWebR ...

  4. laravel 小知识点

    分块导出brokerageCharge = DB::table('表名')$brokerageCharge = $brokerageCharge->chunk(100,function($bro ...

  5. 最新 东方财富java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.东方财富等10家互联网公司的校招Offer,因为某些自身原因最终选择了东方财富.6.7月主要是做系统复习.项目复盘.Leet ...

  6. CenOS 7 安装Tomcat

    1.首先需要安装jdk yum install java-1.8.0-openjdk-devel.x86_64 2.下载 http://mirrors.tuna.tsinghua.edu.cn/apa ...

  7. php5.6安装及php-fpm优化配置

    1,安装依赖包: yum install -y gcc gcc-c++  zlib zlib-devel pcre pcre-devel  gd libjpeg libjpeg-devel libpn ...

  8. zookeeper 操作命令

    简介 查阅了网上相关资料,介绍zookeeper客户端命令并不是非常全面,大多数都是简单介绍ls.get.set.delete.stat这几个简单命令的,下面我把help中的所有命令简单介绍一下以供参 ...

  9. 结合 Nginx 谈谈 Http 状态码

    [Http状态码简介] [百度百科]HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到 RFC ...

  10. plsql中文乱码 显示问号

    输入sql语句select * from V$NLS_PARAMETERS查看字符集,查看第一行value值是否为简体中文 解决方案: 新增环境变量 变量名: NLS_LANG 变量值: SIMPLI ...