考研机试题 九度oj 1523:从上往下打印二叉树
2013-11-27 22:08
183 查看
题目1523:从上往下打印二叉树
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:350
解决:145
题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。
Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。
Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。
Ci=’z’表示第i个节点没有子孩子。
输出:
对应每个测试案例,
按照从上之下,从左至右打印出二叉树节点的值。
样例输入:
样例输出:
题目链接这道题本来很简单,可是自己感觉自己能力不够字符处理不好,换行符老是被吃掉,当输入一个字符,再输入一个十进制数的数,经常会出现会有换行符导致后面的%d输入会被吃掉,用getchar()时有时会出错,导致数字被吃掉所以wrong了很久,最后没办法cin解决了,所以以后要灵活多变,如果一个不能解决时要很快换一个别的方法;这道题思路很简单,关键是队列,再加上简单的广搜;每次找到顶点后就把它孩子入队;把该节点出队,这样就一层一层排列了,感觉这道题应该有更好的方法,我写的很麻烦;
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:350
解决:145
题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
输入:
输入可能包含多个测试样例,输入以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
题目链接这道题本来很简单,可是自己感觉自己能力不够字符处理不好,换行符老是被吃掉,当输入一个字符,再输入一个十进制数的数,经常会出现会有换行符导致后面的%d输入会被吃掉,用getchar()时有时会出错,导致数字被吃掉所以wrong了很久,最后没办法cin解决了,所以以后要灵活多变,如果一个不能解决时要很快换一个别的方法;这道题思路很简单,关键是队列,再加上简单的广搜;每次找到顶点后就把它孩子入队;把该节点出队,这样就一层一层排列了,感觉这道题应该有更好的方法,我写的很麻烦;
#include<stdio.h> #include<iostream> #include<queue> #include<cstring> using namespace std; struct point { int left; int right; int num; char ch; }a[1005]; int visit[1005]; queue<int> q; int Visit() { int b,flag=0; while(!q.empty()) { b=q.front(); if(flag==0) printf("%d",a[b].num); else printf(" %d",a[b].num); flag=1; q.pop();//该节点出队出队 if(a[b].ch=='d') { q.push(a[b].left);//节点孩子入队操作 q.push(a[b].right); } if(a[b].ch=='l') { q.push(a[b].left); } if(a[b].ch=='r') { q.push(a[b].right); } } return 0; } int main() { int i,j,n,num; char ch1; while(scanf("%d",&n)!=EOF) { num=0; for(i=1;i<=n;i++) { scanf("%d",&a[i].num); } // fflush(stdin);在线oj不要用ff否则会错得很惨 for(i=1;i<=n;i++) { //这里错得很离谱,输入输出错误,getchar()很容易错 cin>>a[i].ch; // scanf("%c\n", &a[i].ch); // a[i].ch = getchar(); // printf(" --%c", a[i].ch); if(a[i].ch=='d') { scanf("%d%d",&a[i].left,&a[i].right); // getchar(); visit[a[i].left]++; visit[a[i].right]++; } if(a[i].ch == 'z') getchar(); if(a[i].ch=='l') { scanf("%d",&a[i].left); // getchar(); visit[a[i].left]++; } if(a[i].ch=='r') { scanf("%d",&a[i].right); // getchar(); visit[a[i].right]++; } // fflush(stdin); } for(i=1;i<=n;i++) { if(visit[i]==0) num=i; } q.push(num); Visit(); cout<<endl; } return 0; }
相关文章推荐
- 九度OJ-题目1523:从上往下打印二叉树
- 【剑指Offer面试题】 九度OJ1523:从上往下打印二叉树
- 【九度OJ1523】从上往下打印二叉树
- 九度 题目1523:从上往下打印二叉树 题目1521:二叉树的镜像
- 剑指Offer - 九度1523 - 从上往下打印二叉树
- 九度 题目1523:从上往下打印二叉树
- 【九度】题目1523:从上往下打印二叉树
- 题目1523:从上往下打印二叉树-九度
- 九度oj 题目1004:Median 【ZJU2011考研机试题3】
- 【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ
- 九度oj 题目1032:ZOJ 【ZJU2009考研机试题2】
- 题目1523:从上往下打印二叉树
- 【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ
- 题目1523:从上往下打印二叉树
- 九度oj 题目1005:Graduate Admission 【ZJU2011考研机试题4】
- 九度oj 题目1468:Sharing 【ZJU2012考研机试题2】
- 1523:从上往下打印二叉树 @jobdu
- 剑指OFFER之从上往下打印二叉树(九度OJ1523)
- 九度oj 题目1003:A+B 【ZJU2010考研机试题1】
- 题目1523:从上往下打印二叉树