32-1题:不分行从上到下打印二叉树/BFS/deque/queue
题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
考点
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:
Return reverse iterator to reverse beginning (public member function )
Return reverse iterator to reverse end (public member function )
Return const_iterator to beginning (public member function )
Return const_iterator to end (public member function )
Return const_reverse_iterator to reverse beginning (public member function )
Return const_reverse_iterator to reverse end (public member function )
Capacity:
Change size (public member function )
Shrink to fit (public member function )
Element access:
Access element (public member function )
Modifiers:
Assign container content (public member function )
Insert elements (public member function )
Erase elements (public member function )
Swap content (public member function )
Construct and insert element (public member function )
Construct and insert element at beginning (public member function )
Construct and insert element at the end (public member function )
3.广度优先遍历
广度优先遍历有向图,也可以基于队列实现,树是图的特殊退化形式,从上至下遍历二叉树本质上就是广度优先遍历二叉树。
BFS不管遍历有向图还是树,都要用队列,首先把起始节点(根节点)放入队列,接下来每次取出头部的一个节点,遍历这个节点之后,把他能达到的节点(子节点)全部放入队列的尾部。重复这个过程,直到队列中所有节点遍历完成。
32-1题:不分行从上到下打印二叉树/BFS/deque/queue的更多相关文章
- 《剑指offer》第三十二题(分行从上到下打印二叉树)
// 面试题32(二):分行从上到下打印二叉树 // 题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层 // 打印到一行. #include <cstdio> #in ...
- 《剑指offer》第三十二题(不分行从上往下打印二叉树)
// 面试题32(一):不分行从上往下打印二叉树 // 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. #include <iostream> #include ...
- 【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印.例如: 图 不分行从上往下按层打印二叉 ...
- Acwing43 不分行从上往下打印二叉树
地址 https://www.acwing.com/problem/content/description/41/ 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. 样例 输入如下 ...
- 32-2题:LeetCode102. Binary Tree Level Order Traversal二叉树层次遍历/分行从上到下打印二叉树
题目 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
- AcWing 44. 分行从上往下打印二叉树
地址 https://www.acwing.com/problem/content/description/42/ 题目描述从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行. ...
- 剑指offer 分行从上到下打印二叉树
题目: 从上到下按层打印二叉树,同一层的节点按照从左到右的顺序打印,每一层打印到一行. /* struct TreeNode { int val; struct TreeNode *left; str ...
- 剑指offer——33分行从上到下打印二叉树
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题解: 使用BFS,按层打印即可 class Solution { public: vector<vector&l ...
- 剑指offer——面试题32.1:分行从上到下打印二叉树
void BFSLayer(BinaryTreeNode* pRoot) { if(pRoot==nullptr) return; queue<BinaryTreeNode*> pNode ...
随机推荐
- java怎样防止内存溢出
引起内存溢出的原因有很多种,小编列举一下常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据:2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收:3.代码中存在死 ...
- 把sublime3打造成c++开发环境
安装sublime 3 sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo apt-get ...
- Java多线程与并发——进程与线程
1.什么是进程 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念.而进程是程序在处理机上的一次执行过程,它是一个动态的概念. 进程是一个具有一定独立功能的程序,一个实体,每一个进 ...
- (转)由su和su -的区别谈学习linux运维方法
由su和su -的区别谈学习linux运维方法 原文:http://blog.51cto.com/oldboy/1053606 由su和su -的区别谈学习linux运维方法一例 老男孩Linux培训 ...
- 27 个Jupyter Notebook的小提示与技巧
不多说,直接上干货! 见 http://liuchengxu.org/pelican-blog/jupyter-notebook-tips.html
- log(A/B) = logA -logB
令 X = logA, Y = logB, Z=log(A/B) .2x = A, 2y = B, 2z = A/B, 则有 2z = A/B = 2x / 2y = 2x-y ,有z = x-y,即 ...
- Windows下使用nvm管理多个Node.js 版本
下载 https://github.com/coreybutler/nvm-windows/releases 安装 配置 使用 # nvm install 版本号 # nvm list ...
- Unity C# 脚本的单例
今天学习了一个比较不错的单例模式 public class UnitySigleton <T>: MonoBehaviour where T:class { public static T ...
- Java算法面试题 一个顺子带一对
打牌里面经常出现的5张牌,一个顺子带一对,给你五张牌,比如:1,2,2,2,3 或者 5,6,7,4,4 或者 2,4,3,5,5 或者 7,5,9,6,9 ,这种情况就符合一个顺子带一对,则返回 t ...
- hibernate课程 初探单表映射3-5 hibernate增删改查
本节简介: 1 增删改查写法 2 查询load和查询get方法的区别 3 demo 1 增删改查写法 增加 session.save() 修改 session.update() 删除 session. ...