(剑指Offer)面试题23:从上到下打印二叉树

时间:2023-02-18 11:21:05

题目:

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

思路:

很明显,这是一个广度优先遍历。

需要一个队列容器来保存结点,具体操作:

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:从上到下打印二叉树的更多相关文章

  1. 剑指Offer&colon;面试题23——从上往下打印二叉树&lpar;java实现&rpar;

    问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...

  2. 剑指Offer - 九度1523 - 从上往下打印二叉树

    剑指Offer - 九度1523 - 从上往下打印二叉树2013-12-01 00:35 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以E ...

  3. 剑指offer(22)从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目分析 从下打印就是按层次打印,其实也就是树的广度遍历. 一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的 ...

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

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

  5. 【剑指Offer】22、从上往下打印二叉树

      题目描述:   从上往下打印出二叉树的每个节点,同层节点从左至右打印.   解题思路:   本题实际上就是二叉树的层次遍历,深度遍历可以用递归或者栈,而层次遍历很明显应该使用队列.同样我们可以通过 ...

  6. 剑指offer&lowbar;面试题&lowbar;从上往下打印二叉树

    题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 /     \ 6     10 /   \ ...

  7. 剑指offer-面试题23&period;从上往下打印二叉树

    题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTr ...

  8. 《剑指offer》面试题23 从上往下打印二叉树 Java版

    注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> se ...

  9. 面试题23从上到下打印二叉树&plus;queue操作

    //本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...

  10. C&plus;&plus;版 - 剑指offer 面试题23:从上往下打印二叉树&lpar;二叉树的层次遍历BFS&rpar; 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

随机推荐

  1. Ubuntu14&period;04配置Mono&plus;Jexus

    总所周知,ASP.NET是微软公司的一项技术,是一个网站服务端开发的一种技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们,就是所谓动态网站开发,它依赖运行于 IIS 之中的程序 .但 ...

  2. nginx在linux下安装

    安装前先确认是否已经安装编译包和一些依赖包如果没有安装: yum install pcre* yum install openssl* yum install zlib yum install zli ...

  3. 安装pillow错误的解决方案

    错误信息: ValueError: jpeg is required unless explicitly disabled using --disable-jpeg, aborting        ...

  4. 你可能不知道的Google Chrome命令行参数

    概述:              关于Google Chrome命令行参数(英文叫Google Chrome Command line switches),是Chrome为了实现实验性功能.方便调试. ...

  5. iOS 网络请求——post请求

    -(void)postRequest{ NSString *urlString = [NSString stringWithFormat:@"http://f1.netgears.cn:80 ...

  6. 多字节字符与界面 manifest

    之前把调试项目的时候软件界面变成了很古板的那种界面,后来查了一会发现因为字符集的改变,个人习惯统一我一般用同一种字符集,虽然Unicode只涉及语言问题,不过总感觉它占内存,用非字符集,搜索发现将代码 ...

  7. 【2017-2-17】VS基本应用及C&num;基础第一节(定义变量、输入及输出)

    一VS基本应用 (一)新建项目 新建项目可有多种方法例如: 1.  在VS起始页面建立新项目 2.  在集成环境中,通过"文件"/"新建"/"项目&q ...

  8. poj 1149经典网络流构图

    题意:m个猪圈,n个客户,每个客户给出选则猪圈的钥匙和需要购买猪的个数,其中每次客户购买时客户选则的猪圈数量可以相互更换,问最大购买数量. 思路:以客户作为除源点汇点之外的点,然后对于每个猪圈从源点连 ...

  9. CSS&lpar; Cascading Style Sheets &rpar;简书

    (注:带*号的属性是CSS3新增属性)一.基本规则1.css通常存储在样式表(style)中,用于定义如何显示HTML元素:2.css主要由两个部分构成:选择器和一条或多条声明. 选择器通常是需要改变 ...

  10. Hadoop记录-日常运维操作

    1.Active NameNode hang死,未自动切换 #登录当前hang死 Active namenode主机,停止Namenode,触发自动切换.hadoop-daemon.sh stop n ...