数据结构实验之二叉树七:叶子问题
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于50个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Sample Input
abd,eg,cf,
xnl,i,u,
Sample Output
dfg
uli
#include <stdio.h>
#include <stdlib.h>
#include <queue>
using namespace std;
char a[50];
int i;
typedef struct st
{
char data;
struct st*l,*r;
}tree;
tree*create()
{
tree*t;
if(a[++i] == ',')
t=NULL;
else
{
t=new tree;
t->data=a[i];
t->l=create();
t->r=create();
}
return t;
}
void leave(tree*t)
{
queue<tree*>q;
q.push(t);
while(!q.empty())
{
t=q.front();
q.pop();
if(t)
{
if(t->l == NULL&&t->r == NULL) //错误:一开始将此条件与t写在一块。
cout<<t->data;
q.push(t->l);
q.push(t->r);
}
}
}
int main()
{
while(cin>>a)
{
i=-1;
tree*t;
t=create();
leave(t);
cout<<endl;
}
return 0;
}