题目描述
输入一串二叉树,用遍历前序打出。
输入输出格式
输入格式:
第一行为二叉树的节点数n。( n≤26n \leq 26n≤26 )
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式:
前序排列的二叉树
输入输出样例
输入样例#1: 复制
6 abc bdi cj* d** i** j**
输出样例#1: 复制
abdicj
思路:主要就是利用了二叉树的性质....还有记得tree数组的长度 没了
#include<bits/stdc++.h>
using namespace std;
#define maxn 10005
typedef long long ll;
ll T,flag;
char a,b,c,tree[maxn];
void query(ll x)
{
if(tree[x]>='a' && tree[x]<='z')
cout << tree[x];
if(tree[x*2]>='a' && tree[x*2]<='z')
query(x*2);
if(tree[x*2+1]>='a' && tree[x*2+1]<='z')
query(x*2+1);
return ;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> T;
while(T--)
{
cin >> a >> b >> c;
if(flag == 0) //建树
{
tree[1] = a;
flag =1;
if(b != '*')
tree[2] = b;
if(c != '*')
tree[3] = c;
}
else
{
ll i,fla = 0;
for( i = 1; i <= maxn; i++)
{
if(tree[i] == a)
{
fla = 1;
break;
}
}
if(flag ==1)
{
if(b != '*')
tree[i*2] = b;
if(c != '*')
tree[i*2+1] = c;
}
}
}
query(1); //从1点查询并输出
return 0;
}