题目描述:

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

输入:

输入可能包含多个测试样例,输入以EOF结束。

对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。

Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。

Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。

Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。

Ci=’z’表示第i个节点没有子孩子。

输出:

对应每个测试案例,

按照从上之下,从左至右打印出二叉树节点的值。

样例输入:

7
8 6 5 7 10 9 11
d 2 5
d 3 4
z
z
d 6 7
z
z

样例输出:

8 6 10 5 7 9 11
【解题思路】这道题目应该一眼就看看出是树的层序遍历,看出来之后也就没有什么可以说的了。注意首先用一定的数据结构保存树,然后利用set数据结构寻找出根节点。然后就是利用队列进行层序遍历。
AC code:
#include <cstdio>
#include <vector>
#include <set>
#include <queue>
using namespace std; struct tr
{
int val,lc,rc;
}; int main()
{
int n,r,l;
char cc[2];
while(scanf("%d",&n)!=EOF)
{
tr rt;
rt.lc=rt.rc=0;
vector<tr> vect(n+1);
set<int> setidx;
queue<int> qu;
for(int i=1;i<=n;++i)
{
scanf("%d",&rt.val);
vect[i]=rt;
setidx.insert(i);
}
for(int i=1;i<=n;++i)
{
scanf("%s",cc);
switch(cc[0]){
case 'd':
scanf("%d%d",&l,&r);
vect[i].lc=l;
vect[i].rc=r;
setidx.erase(l);
setidx.erase(r);
break;
case 'l':
scanf("%d",&l);
vect[i].lc=l;
setidx.erase(l);
break;
case 'r':
scanf("%d",&r);
vect[i].rc=r;
setidx.erase(r);
break;
case 'z':
break;
default:
break;
}
}
printf("%d",vect[*setidx.begin()].val);
if(vect[*setidx.begin()].lc!=0)
qu.push(vect[*setidx.begin()].lc);
if(vect[*setidx.begin()].rc!=0)
qu.push(vect[*setidx.begin()].rc);
while(!qu.empty())
{
int ft=qu.front();
printf(" %d",vect[ft].val);
if(vect[ft].lc!=0)
qu.push(vect[ft].lc);
if(vect[ft].rc!=0)
qu.push(vect[ft].rc);
qu.pop();
}
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1523
User: huo_yao
Language: C++
Result: Accepted
Time:0 ms
Memory:1056 kb
****************************************************************/

题目链接:http://ac.jobdu.com/problem.php?pid=1523

九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299

【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ的更多相关文章

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

    题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 很明显,这是一个广度优先遍历. 需要一个队列容器来保存结点,具体操作: 1.将根结点压入队列中,并打印根结点:如果根结点有子结点 ...

  2. 【剑指offer】面试题23:从上往下打印二叉树

    题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; stru ...

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

    从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 借助两个辅助队列,一个用来存放结点,一个用来存放结点值: 先将根节点加入到队列中,然后遍历队列中的元素,遍历 ...

  4. 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III

    题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...

  5. 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II

    题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...

  6. 【剑指Offer】面试题32 - I. 从上到下打印二叉树

    题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3 ...

  7. 《剑指offer》面试题32 - I. 从上到下打印二叉树

    问题描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印.   例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...

  8. 《剑指offer》面试题32 - II. 从上到下打印二叉树 II

    问题描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...

  9. 《剑指offer》面试题32 - III. 从上到下打印二叉树 III

    问题描述 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20, ...

随机推荐

  1. 远程服务器返回错误: 404错误、远程服务器返回错误:500错误、 HttpWebResponse远程服务器返回错误:(404、500) 错误。

    现象 我们编码实现请求一个页面时,请求的代码类似如下代码: HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);req.Use ...

  2. about Base64

    用webservice传送文件的时候发现,如果发送的文件中有0x00字符,会被认为是字符串结尾,后面的内容就发送不过去,因此需要对不是纯文本格式的文件做BASE64编码,这样文件中就不会有0x00这样 ...

  3. Java中Volatile关键字详解(转载)

    转载自:https://www.cnblogs.com/zhengbin/p/5654805.html 一.基本概念 先补充一下概念:Java 内存模型中的可见性.原子性和有序性. 可见性: 可见性是 ...

  4. VS2017中遇到不存在从string到const char*的转换函数的解决方法

    使用c_str()函数 c_str函数的返回值是const char*. c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有stri ...

  5. 【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第56章       STM32H7的DMA2D应用之刷色块, ...

  6. CSS-自适应网页使用@media和rem

    @media 查询 @media 媒体查询选择性加载css,意思是自动探测屏幕宽度,然后加载相应的CSS文件.可以针对不同的屏幕尺寸设置不同的样式,特别是需要设置设计响应式的页面,@media 是个不 ...

  7. powerbuilder连接oracle数据库

    一.打开已经安装好的pb9.0,主界面菜单栏有个两个圆柱形就行数据库连接,点击database. 二.选择oracle版本,由于数据库版本是9i,可以使用084 oracle8/8i.右键--选择ne ...

  8. 「NOI2001」食物链

    传送门 Luogu 解题思路 带权并查集我不会啊 考虑种类并查集(扩展域并查集的一种). 开三倍空间,一倍维护本身,二倍维护猎物,三倍维护天敌,然后用并查集搞一搞就好了. 细节注意事项 咕咕咕 参考代 ...

  9. Stream:java1.8新特性

    原 Stream:java1.8新特性 2017年08月01日 18:15:43 kekeair-zhang 阅读数:392 标签: streamjava1-8新特性 更多 个人分类: 日记 版权声明 ...

  10. python 切片技巧

    说明: 字符串[开始索引:结束索引:步长] 开始索引:从指定位置开始截取: 结束索引:从指定位置结束截取,但不包含该位置的字符. 步长:不指定时步长为1: 1)当步长为正数时候,那么切片是从左到右进行 ...