题目描述
输入一串二叉树,用遍历前序打出。
输入输出格式
输入格式:第一行为二叉树的节点数n。
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式:前序排列的二叉树
输入输出样例
输入样例#1:
6 abc bdi cj* d** i** j**
输出样例#1:
abdicj
#include<iostream>
#include<string.h>
using namespace std;
struct node
{
char l,r,fa;
}tree[1000];
void work(char s)
{
cout<<s;
if(tree[s].l!='*') work(tree[s].l);
if(tree[s].r!='*') work(tree[s].r);
}
int main()
{
int i,n;
char c,fir;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>c;
if(i==1) fir=c;
cin>>tree[c].l>>tree[c].r;
// tree[tree[c].l].fa=tree[tree[c].r].fa=c;
}
work(fir);
return 0;
}
/*
#include<stdio.h>
#include<string.h>
struct node{ //定义node类型
char lc,rc,fa; //分别有它的左儿子,右儿子和父亲
};
node tree[1000];
void work(char s)
{ //简单的递归
printf("%c", s);
if (tree[s].lc!='*') work(tree[s].lc);
if (tree[s].rc!='*') work(tree[s].rc);
}
int main()
{
int i,n;
char c,fir;
scanf("%d", &n);
for (i=1;i<=n;i++){ //在这里我本来要用while循环,但是这样的话就保留不了树根的位置,所以用了for
scanf(" %c", &c);
if (i==1) fir = c;
scanf(" %c%c", &tree[c].lc,&tree[c].rc);
tree[tree[c].lc].fa = tree[tree[c].rc].fa = c;
}
work (fir);
return 0;
*/