题目

从上往下打印出二叉树的每个节点,同层节点从左至右打印。


考点

1.广度优先遍历

2.binary tree

3.queue

4.deque


思路

按层打印:8、6、10、5、7、9、11

用STL的deque完成两端进出的操作。

规律:

1.从头节点开始放入容器。

2.每次打印一个节点时,如果该节点有子节点,将其左子节点、右子节点依次放入容器内。

3.接下来打印deque的front().直到deque里面没有值。


代码

newcoder

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
//1.定义返回值
vector<int> result;
//2.入口鲁棒性测试
if(!root)
return result; //3.定义节点队列
deque<TreeNode*> dequeTree; //4.将头节点入deque
dequeTree.push_back(root); //5.打印剩下容器的节点
while( !dequeTree.empty())
{
TreeNode* cur=dequeTree.front();
result.push_back(cur->val);
dequeTree.pop_front(); if(cur->left)
dequeTree.push_back(cur->left); if(cur->right)
dequeTree.push_back(cur->right);
} //6.返回结果
return result;
}
};

问题

1.数组越界

访问树的子节点操作时,一定要判断子节点是否存在。


2.deque

Iterators:

begin

end

rbegin

Return reverse iterator to reverse beginning (public member function )

rend

Return reverse iterator to reverse end (public member function )

cbegin 

Return const_iterator to beginning (public member function )

cend 

Return const_iterator to end (public member function )

crbegin 

Return const_reverse_iterator to reverse beginning (public member function )

crend 

Return const_reverse_iterator to reverse end (public member function )

Capacity:

size

max_size

resize

Change size (public member function )

empty

shrink_to_fit 

Shrink to fit (public member function )

Element access:

operator[]

at

Access element (public member function )

front

back

Modifiers:

assign

Assign container content (public member function )

push_back

push_front

pop_back

pop_front

insert

Insert elements (public member function )

erase

Erase elements (public member function )

swap

Swap content (public member function )

clear

emplace 

Construct and insert element (public member function )

emplace_front 

Construct and insert element at beginning (public member function )

emplace_back 

Construct and insert element at the end (public member function )

3.广度优先遍历

广度优先遍历有向图,也可以基于队列实现,树是图的特殊退化形式,从上至下遍历二叉树本质上就是广度优先遍历二叉树。

BFS不管遍历有向图还是,都要用队列,首先把起始节点(根节点)放入队列,接下来每次取出头部的一个节点,遍历这个节点之后,把他能达到的节点(子节点)全部放入队列的尾部。重复这个过程,直到队列中有节点遍历完成

32-1题:不分行从上到下打印二叉树/BFS/deque/queue的更多相关文章

  1. 《剑指offer》第三十二题(分行从上到下打印二叉树)

    // 面试题32(二):分行从上到下打印二叉树 // 题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层 // 打印到一行. #include <cstdio> #in ...

  2. 《剑指offer》第三十二题(不分行从上往下打印二叉树)

    // 面试题32(一):不分行从上往下打印二叉树 // 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. #include <iostream> #include ...

  3. 【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印.例如: 图  不分行从上往下按层打印二叉 ...

  4. Acwing43 不分行从上往下打印二叉树

    地址 https://www.acwing.com/problem/content/description/41/ 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. 样例 输入如下 ...

  5. 32-2题:LeetCode102. Binary Tree Level Order Traversal二叉树层次遍历/分行从上到下打印二叉树

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

  6. AcWing 44. 分行从上往下打印二叉树

    地址 https://www.acwing.com/problem/content/description/42/ 题目描述从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行. ...

  7. 剑指offer 分行从上到下打印二叉树

    题目: 从上到下按层打印二叉树,同一层的节点按照从左到右的顺序打印,每一层打印到一行. /* struct TreeNode { int val; struct TreeNode *left; str ...

  8. 剑指offer——33分行从上到下打印二叉树

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.   题解: 使用BFS,按层打印即可 class Solution { public: vector<vector&l ...

  9. 剑指offer——面试题32.1:分行从上到下打印二叉树

    void BFSLayer(BinaryTreeNode* pRoot) { if(pRoot==nullptr) return; queue<BinaryTreeNode*> pNode ...

随机推荐

  1. nginx大量TIME_WAIT的解决办法

    1.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看time_wait 很大 2.解决此问题需要对sysc ...

  2. ubuntu下ganglia3.7.2编译安装

    一.介绍 ganglia主要包括gmond和gmeta 1.gmond用于收集监测数据,可以发送也可以接收在同一个组播或单播通道上的统计信息.gmond有两个角色,一个是发送者,另一个是接收者.当mu ...

  3. PIL图片格式转换

    PIL格式转换 原图: #!/usr/local/bin/python # -*- coding: utf8 -*- from PIL import Image, ImageFilter import ...

  4. 07.Spring Bean 加载 - BeanDefinitionReader

    基本概念 BeanDefinitionReader ,该接口的作用就是加载 Bean. 在 Spring 中,Bean 一般来说都在配置文件中定义.而在配置的路径由在 web.xml 中定义.所以加载 ...

  5. (转)Linux修改eth2到eth0(70-persistent-net.rules)

    之前在公司提供的虚拟机器上面,一直有个问题用着很不舒服,为什么它的IP选择的设备的eth2的,但是我在/etc/sysconfig/network-scrpts/下面也没有找到ifcfg-eth2的配 ...

  6. 让最新的 Android Q Beta 3 强制重启的 Project Mainline,到底是什么?

    一. 序 最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能. 近期不少体验用户反 ...

  7. JAVA基础系列(一) 概述与相关概念

    万事开头难,来这个平台上已经有一段时间了,看到了很多高质量的文章,也很喜欢这种简约的风格.一直也想把自己的零散的知识体系组织起来,但苦于自己拙劣的文笔和不成流派的风格让大家笑话,直到现在才开始.可是从 ...

  8. springboot集成freemarker 配置application.properties详解

    #配置freemarker详解 #spring.freemarker.allow-request-override=false # Set whether HttpServletRequest att ...

  9. HDU4352 XHXJ's LIS(LIS 状压)

    题意 题目链接 Sol 刚开始的思路是\(f[i][j]\)表示到第\(i\)位,LIS长度为\(j\)的方案. 然而发现根本不能转移,除非知道了之前的状态然后重新dp一遍.. 题解,,,挺暴力的把, ...

  10. Android 桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果

    首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下类似的效果. 先谈一下基本的实现原理,这种桌面悬浮窗的效果很 ...