Description
已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于50个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Sample
Input
abd,eg,cf,
xnl,i,u,
Output
dfg
uli
#include <stdio.h>
#include <stdlib.h>
char a[100];
int x;
struct node
{
int data;
struct node *l, *r;
};
struct node *creat()
{
struct node *tree;
char c;
c = a[x++];
if (c==',')
return NULL;
else
{
tree = (struct node *)malloc(sizeof(struct node));
tree->data = c;
tree->l = creat();
tree->r = creat();
}
return tree;
};
void leave(struct node *tree)
{
int k=0, t=0, flag;
struct node *a[100];
a[k++] = tree;
while (k>t)
{
if (a[t]!=0)
{
flag = 0;
a[k++] = a[t]->l;
if (a[t]->l==NULL)
flag ++;
a[k++] = a[t]->r;
if (a[t]->r==NULL)
flag ++;
if (flag==2)
printf("%c", a[t]->data);
}
t ++;
}
}
int main()
{
while (~scanf("%s", a))
{
x = 0;
struct node *tree;
tree = (struct node *)malloc(sizeof(struct node));
tree = creat();
leave(tree);
printf("\n");
}
return 0;
}