タイトル1523:二叉木を上から下へ印刷-九度
1943 ワード
タイトルの説明:
ツリーの各ノードを上から下に印刷し、同レイヤノードを左から右に印刷します.
入力:
入力には複数のテストサンプルが含まれ、入力はEOFで終了します.
各テストケースについて、入力する最初の行の整数n(1<=n<=1000、:nは入力するツリー要素の個数(ノード1から番号付け)を表します.次の行には、i番目のツリーノードの要素の値を表すn個の数字があります.次はn行で、各行に1文字Ciがあります.
Ci=’d’は,i番目のノードに2人の子があり,次いで左の子番号と右の子番号であることを示す.
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
推奨指数:※
ソース:http://ac.jobdu.com/problem.php?pid=1523
BFS
ツリーの各ノードを上から下に印刷し、同レイヤノードを左から右に印刷します.
入力:
入力には複数のテストサンプルが含まれ、入力はEOFで終了します.
各テストケースについて、入力する最初の行の整数n(1<=n<=1000、:nは入力するツリー要素の個数(ノード1から番号付け)を表します.次の行には、i番目のツリーノードの要素の値を表すn個の数字があります.次はn行で、各行に1文字Ciがあります.
Ci=’d’は,i番目のノードに2人の子があり,次いで左の子番号と右の子番号であることを示す.
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
推奨指数:※
ソース:http://ac.jobdu.com/problem.php?pid=1523
BFS
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<queue>
using namespace std;
typedef struct node{
int val;
int left;
int right;
}node;
vector< node > tree;
void print_tree(int n)
{
if(n>0){
queue <int> q;
printf("%d",tree[1].val);
if(tree[1].left!=-1)
q.push(tree[1].left);
if(tree[1].right!=-1)
q.push(tree[1].right);
while(!q.empty()){
int tmp;
tmp=q.front();
printf(" %d",tree[tmp].val);
q.pop();
if(tree[tmp].left!=-1)
q.push(tree[tmp].left);
if(tree[tmp].right!=-1)
q.push(tree[tmp].right);
}
}
}
int main()
{
int n,i;
while (scanf("%d",&n)!=EOF){
tree.resize(n+1);
for(i=1;i<=n;i++)
scanf("%d",&tree[i].val);
for(i=1;i<=n;i++){
char ch[2];
scanf("%s",ch);
if('d'==ch[0])
scanf("%d%d",&tree[i].left,&tree[i].right);
else if('l'==ch[0]){
scanf("%d",&tree[i].left);
tree[i].right=-1;
}
else if('r'==ch[0]){
tree[i].left=-1;
scanf("%d",&tree[i].right);
}
else{
tree[i].right=-1;
tree[i].left=-1;
}
}
print_tree(n);
}
return 0;
}