(剑指Offer)面试题23:从上到下打印二叉树
题目:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:
很明显,这是一个广度优先遍历。
需要一个队列容器来保存结点,具体操作:
1、将根结点压入队列中,并打印根结点;如果根结点有子结点,将左右子结点依次压入队列的尾部;
2、如果队列不为空,从队列头部取出结点,重复步骤1,直至队列为空。
推广:
不管是广度优先遍历一个有向图还是一棵树,都要用到队列;
第一步就把起始结点(对树而言是根节点)放入队列中;接下来每一次从队列的头部取出一个结点,遍历这个结点之后把从它能到达的结点(对树而言是子结点)都依次放入队列;重复这个遍历过程,直到队列中的结点全部被遍历为止。
代码:
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
};
void PrintFromTopToBottom(TreeNode* root){
if(root==NULL)
return;
std::deque<TreeNode*> dequeTree;
dequeTree.push_back(root);
TreeNode* node;
while(!dequeTree.empty()){
node=dequeTree.front();
dequeTree.pop_front();
printf("%d ",node->val);
if(root->left)
dequeTree.push_back(root->left);
if(root->right)
dequeTree.push_back(root->right);
}
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/7fe2212963db4790b57431d9ed259701?rp=1
AC代码:
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode *root) {
std::vector<int> data;
if(root!=NULL){
std::deque<TreeNode*> dequeTreeNode;
dequeTreeNode.push_back(root);
TreeNode* node;
while(!dequeTreeNode.empty()){
node=dequeTreeNode.front();
dequeTreeNode.pop_front();
data.push_back(node->val);
if(node->left)
dequeTreeNode.push_back(node->left);
if(node->right)
dequeTreeNode.push_back(node->right);
}
}
return data;
}
};
(剑指Offer)面试题23:从上到下打印二叉树的更多相关文章
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...
- 剑指Offer - 九度1523 - 从上往下打印二叉树
剑指Offer - 九度1523 - 从上往下打印二叉树2013-12-01 00:35 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以E ...
- 剑指offer(22)从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目分析 从下打印就是按层次打印,其实也就是树的广度遍历. 一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的 ...
- 【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印.例如: 图 不分行从上往下按层打印二叉 ...
- 【剑指Offer】22、从上往下打印二叉树
题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路: 本题实际上就是二叉树的层次遍历,深度遍历可以用递归或者栈,而层次遍历很明显应该使用队列.同样我们可以通过 ...
- 剑指offer_面试题_从上往下打印二叉树
题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 / \ 6 10 / \ ...
- 剑指offer-面试题23.从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTr ...
- 《剑指offer》面试题23 从上往下打印二叉树 Java版
注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> se ...
- 面试题23从上到下打印二叉树+queue操作
//本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
随机推荐
- 【转】安装Django
原文网址:http://www.crifan.com/record_install_django/ 1.参考Quick install guide,最终找到下载的地址: http://bitnami. ...
- HDFS命令行文件操作
Hadoop文件操作命令形式为 hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命 ...
- Android设计模式之策略模式
今天介绍下策略模式,直接先上UML图 策略模式的概念 The Strategy Pattern defines a family of algorithms,encapsulates each one ...
- 【Leetcode】Evaluate Reverse Polish Notation JAVA
一.问题描述 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators ...
- ylb:SQL Server中的时间函数
ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1. 当前系统日期 ...
- nginx upstream模块
upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler.filter和upstream.前面的章节中,读者已经了解了handler.filter. 利 ...
- Unreal Engine 虚幻引擎宣布对开发者免费
虚幻引擎4现在可供每个人免费使用,而且所有未来的更新都将免费!您可以下载引擎并将其用于游戏开发的各个方面,包括教育.建筑以及可视化,甚至虚拟现 实.电影和动画. 当您发布游戏或应用时,在您的每个游戏在 ...
- 数往知来 SQL SERVER 基本语法<七>
sqlserver学习_01 启动数据库 开始->cmd->进入控制台 sqlcmd->-S .\sqlexpress 1> 如果出现表示数据库"sqle ...
- scrollTop
scrollTop 表示滚动的高度,默认从position:0;开始向下滚,scrollTop(offset)的offset表示相对顶部的偏移,以像素计,<br/> scrollTop() ...
- (转载)OC学习篇之---类的延展
前一篇文章我们介绍了类的类目概念和使用,那么这篇文章我们继续来介绍一下OC中的一个特性:延展. 其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前 ...