题目描述
输入一串完全二叉树,用遍历前序打出。
输入输出格式
输入格式:
第一行为二叉树的节点数n。
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式:
前序排列的完全二叉树
输入输出样例
输入样例#1:
6
abc
bdi
cj*
d**
i**
j**
输出样例#1:
abdicj
【分析】
题太裸…不解释
【代码】
//洛谷 P1305 新二叉树
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
int lson[10000],rson[10000];
bool vis[10000],father[10000];
char tmp[4];
int n;
inline void print(int num)
{
if(!num) return;
char t=num;
printf("%c",t);
print(lson[num]);
print(rson[num]);
}
int main()
{
int i,j;
scanf("%d",&n);
fo(i,1,n)
{
scanf("%s",tmp);
if(tmp[1]!='*') lson[tmp[0]]=tmp[1],father[tmp[1]]=1;
if(tmp[2]!='*') rson[tmp[0]]=tmp[2],father[tmp[2]]=1;
vis[tmp[0]]=vis[tmp[1]]=vis[tmp[2]]=1;
}
father['*']=1;
fo(i,1,9999)
if(vis[i] && !father[i]) break;
print(i);
return 0;
}