记录一个菜逼的成长。。
题目大意:
给你n个点的树,让你输出层序和中序遍历序列。
#include <bits/stdc++.h>
using namespace std;
#define ALL(v) (v).begin(),(v).end()
#define cl(a,b) memset(a,b,sizeof(a))
#define clr clear()
#define pb push_back
typedef long long LL;
struct Node{
int l,r;
}tree[100];
int d[20];
void bfs(int x)
{
queue<int>q;
q.push(x);
int flag = 1;
while(!q.empty()){
int f = q.front();q.pop();
if(flag)printf("%d",f),flag = 0;
else printf(" %d",f);
if(tree[f].r != -1)q.push(tree[f].r);
if(tree[f].l != -1)q.push(tree[f].l);
}
puts("");
}
int flag;
void in_tra(int x)
{
if(x == -1)return ;
in_tra(tree[x].r);
if(flag)printf("%d",x),flag = 0;
else printf(" %d",x);
in_tra(tree[x].l);
}
int main()
{
int n;
while(~scanf("%d",&n)){
for( int i = 0; i < n; i++ )tree[i].l = tree[i].r = -1;
char s1[3],s2[3];
for( int i = 0; i < n; i++ ){
scanf("%s%s",s1,s2);
if(isdigit(s1[0])){
tree[i].l = s1[0] - '0';
d[s1[0] - '0']++;
}
if(isdigit(s2[0])){
tree[i].r = s2[0] - '0';
d[s2[0] - '0']++;
}
}
int root ;
for( int i = 0; i < n; i++ ){
if(!d[i]){root = i;break;}
}
bfs(root);
flag = 1;
in_tra(root);
puts("");
}
return 0;
}