【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ
- 题目描述:
-
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 输入:
-
输入可能包含多个测试样例,输入以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的更多相关文章
- (剑指Offer)面试题23:从上到下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 很明显,这是一个广度优先遍历. 需要一个队列容器来保存结点,具体操作: 1.将根结点压入队列中,并打印根结点:如果根结点有子结点 ...
- 【剑指offer】面试题23:从上往下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; stru ...
- 《剑指offer》— JavaScript(22)从上往下打印二叉树
从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 借助两个辅助队列,一个用来存放结点,一个用来存放结点值: 先将根节点加入到队列中,然后遍历队列中的元素,遍历 ...
- 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III
题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...
- 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II
题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- 【剑指Offer】面试题32 - I. 从上到下打印二叉树
题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3 ...
- 《剑指offer》面试题32 - I. 从上到下打印二叉树
问题描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- 《剑指offer》面试题32 - II. 从上到下打印二叉树 II
问题描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
- 《剑指offer》面试题32 - III. 从上到下打印二叉树 III
问题描述 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20, ...
随机推荐
- Shiro入门学习之散列算法与凭证配置(六)
一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...
- oracle用户表字段注释
SELECT C.TABLE_NAME,NUM_ROWS,(select COMMENTS from user_tab_comments WHERE TABLE_NAME=C.TABLE_NAME) ...
- Try-Catch无法正确定位异常位置,我推荐2个有效技巧
宇宙第一开发IDE Visual Studio的调试功能非常强大,平常工作debug帮助我们解决不少问题.今天分享两个异常捕获的技巧,希望能够帮助解决一些问题. 以下两种情况,我相信大家都会遇到过. ...
- web渗透(转)
某天比较无聊,听一个朋友推荐httpscan这款工具,于是就下载下来试试. 首先对某学校网段开始进行测试. 1 python httpscan.py **.**.**.0/24 测试时发现有个比较 ...
- PTA的Python练习题(十四)
第4章-10 最大公约数和最小公倍数 m,n=map(int,input().split()) min=0 a=b=0 if m >n: min=m else: min=n for i in r ...
- System.getProperty() 获取系统变量
例:获取用户当前的工作目录 String CONFPREFIXURL = System.getProperty("user.dir"); System.out.println(CO ...
- 【PAT甲级】1003 Emergency (25 分)(SPFA,DFS)
题意:n个点,m条双向边,每条边给出通过用时,每个点给出点上的人数,给出起点终点,求不同的最短路的数量以及最短路上最多能通过多少人.(N<=500) AAAAAccepted code: #in ...
- vue.js ③
1.组件使用的细节点 H5编码中的规范是tr必须在tbody里所以不能直接套用<row></row>的写法,<ul>标签下支持<li>,select标签 ...
- 「JSOI2011」分特产
「JSOI2011」分特产 传送门 计数题. 考虑容斥掉每人至少一个的限制. 就直接枚举至少有多少人没有分到特产,然后剩下的随便分. \[Ans = \sum_{i = 0}^n (-1)^i {n ...
- 都客仿站高手已注册旗舰版V3.1
链接:https://pan.baidu.com/s/1R5ldFDjekuXmEp42-8SQSQ 提取码:gkm9