题目描述
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
输入
输入数据有多行,每一行是一个长度小于
50
个字符的字符串。
输出
按从上到下从左到右的顺序输出二叉树的叶子结点。
示例输入
abd,,eg,,,cf,,, xnl,,i,,u,,
示例输出
dfg uli
提示
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char s[66];
int i;
struct node
{
char data;
struct node *l,*r;
};
struct node *create(struct node *h)
{
i++;
if(s[i]==',')
{
h=NULL;
}
else
{
h=(struct node *)malloc(sizeof(struct node));
h->data=s[i];
h->l=create(h->l);
h->r=create(h->r);
}
return h;
};
void leafprint(struct node *tree)
{
struct node *q[55];
int head,tail;
head=0;
tail=1;
q[head]=tree;
while(head<tail)
{
if(q[head]!=NULL)
{
if(q[head]->l==NULL&&q[head]->r==NULL)
{
printf("%c",q[head]->data);
}
q[tail++]=q[head]->l;
q[tail++]=q[head]->r;
}
head++;
}
}
int main()
{
struct node *tree;
while(~scanf("%s",s))
{
i=-1;
tree=create(tree);
leafprint(tree);
printf("\n");
}
return 0;
}