题目

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如:

给定二叉树: [3,9,20,null,null,15,7],

    3
/ \
9 20
/ \
15 7

返回其层次遍历结果:

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

考点


思路


代码

newcoder

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
//1.定义返回结果
vector<vector<int>> ret;
vector<int> subret;
//2.入口检查
if(!pRoot)
return ret; //3.定义变量和队列
int toBePrinted=1;//这一级还剩的节点数
int NextLevel=0;//下一级的节点数
queue<TreeNode*> queueTree;
int level=0;//当前的级数
//4.放入根节点
queueTree.push(pRoot); //5.循环
while(!queueTree.empty())
{
TreeNode* cur=queueTree.front();
subret.push_back(cur->val);
queueTree.pop(); //如果有左子节点
if(cur->left)
{
queueTree.push(cur->left);
NextLevel++;
} //如果有右子节点
if(cur->right)
{
queueTree.push(cur->right);
NextLevel++;
} toBePrinted--;
if(!toBePrinted)
{
level++;
toBePrinted=NextLevel;
NextLevel=0;
ret.push_back(subret);
subret.clear();
}
} return ret;
} };

leetcode

/**
* 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) { //1.返回容器
vector<int> subret;
vector<vector<int>> ret; //2.入口检查
if(!root)
return ret; //3.定义变量和队列
//该层还剩打印的节点
int remain=1;
//下层的节点数
int nextLevel=0; //树节点队列
queue<TreeNode*> nodes; //将根节点入队列
nodes.push(root); //4.将队列元素放入容器
while(!nodes.empty())
{
//存储当前节点为队列的头部
TreeNode* cur = nodes.front();
//将当前节点塞入subret
subret.push_back(cur->val);
nodes.pop();
remain--; if(cur->left)
{
nextLevel++;
nodes.push(cur->left);
} if(cur->right)
{
nextLevel++;
nodes.push(cur->right);
} //当前级元素全部读完
if(!remain)
{
//将subret pushback进ret
ret.push_back(subret);
//将下一层的剩余元素个数更新
remain=nextLevel;
//下一层的下一层初始化为0
nextLevel=0;
//清空subret
subret.clear();
} } //5.返回ret
return ret; }
};

问题

1.queue

Member functions

(constructor)

empty

size

front

back

push

emplace 

Construct and insert element (public member function )

pop

swap 

Swap contents (public member function )

Non-member function overloads

relational operators

Relational operators for queue (function )

swap (queue) 

Exchange contents of queues (public member function )

queue只有push()。。。vector deque才用push_back()


2.二维vector遍历

#include<iostream>
#include<vector> using namespace std; int main()
{
vector<vector<int>> ves;
vector<int> a{ 1, 2, 3 };
vector<int> b{ 2, 4, 5, 6 }; ves.push_back(a);
ves.push_back(b);
for (auto it = ves.begin(); it != ves.end(); ++it){
for (int i = 0; i < (*it).size(); ++i)
cout << (*it)[i] << " " ;
}
}

这题就用subret和ret来定义返回值,注意每层subret要清空。 

32-2题:LeetCode102. Binary Tree Level Order Traversal二叉树层次遍历/分行从上到下打印二叉树的更多相关文章

  1. [刷题] 102 Binary Tree Level Order Traversal

    要求 对二叉树进行层序遍历 实现 返回结果为双重向量,对应树的每层元素 队列的每个元素是一个pair对,存树节点和其所在的层信息 1 Definition for a binary tree node ...

  2. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

  3. LeetCode102 Binary Tree Level Order Traversal Java

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

  4. (二叉树 BFS) leetcode102. Binary Tree Level Order Traversal

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

  5. leetcode102 Binary Tree Level Order Traversal

    """ Given a binary tree, return the level order traversal of its nodes' values. (ie, ...

  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. Leetcode102. Binary Tree Level Order Traversal二叉树的层次遍历

    给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其 ...

  8. (二叉树 BFS) leetcode 107. Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  9. [Leetcode] Binary tree level order traversal ii二叉树层次遍历

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

随机推荐

  1. Unity [RequireComponent(typeof(组件名))]

  2. OpenStack git cmd

    文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库. 基本的 Git 工作流程如下: 在工作目录中修改某些文件. 对修改后的文件进行快照,然后保存到暂存区域. 提交更新,将保存在暂存区 ...

  3. Python踩坑之旅其一杀不死的Shell子进程

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...

  4. Python list, dict, set, tuple

    list方法 append: 添加一个新的元素到末尾 extend: 扩展元素 insert: 在任何位置插入元素 pop: 弹出末尾的元素 remove: remove first occurren ...

  5. Entity framework 7通过代码添加外键关系的方法

    这几天研究Asp.net5,也试着写了一些示例代码,因为网上的资料实在是太少了,所以在此把一些问题的解决方法记录下来,以备后查. 问题: 在EF7中,假如数据库已经存在,并且两个表具有外键关系,但是实 ...

  6. 字符串json转成json对象

    方法1 JsonSerializer serializer = new JsonSerializer(); TextReader tr = new StringReader(text); JsonTe ...

  7. 【练习笔记】spring 配置Schedule

    spring项目一些简单的定时任务可以通过@Schedule注解来实现,具体配置如下 在applicationContext.xml文件中增加配置 1.引入task约束 xmlns:task=&quo ...

  8. 使用JS实现图片轮播(前后首尾相接)

    最近各种跑面试,终于还是被问到这个,一脑子浆糊,当时没想出来首尾相接怎么搞,回来之后研究了一波,终于搞出来了,不多说,直接看代码 代码参考了一位已经写好了图片轮播功能的(在此表示感谢),但是没有首尾相 ...

  9. 【extjs6学习笔记】1.12 初始: Working with DOM

    http://www.extjs-tutorial.com/extjs/working-with-dom Ext JS是一个DHTML库. 它通过使用JavaScript创建或操作DOM元素来创建UI ...

  10. [opencv3.2cmake error ] sys/videoio.h no such file or directories

    I don't have /usr/include/sys/videoio.h at all Before that , I have ipp download question. So I down ...