http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=3346&cid=1796
数据结构实验之二叉树七:叶子问题
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
输入
输入数据有多行,每一行是一个长度小于50个字符的字符串。
输出
按从上到下从左到右的顺序输出二叉树的叶子结点。
示例输入
abd,,eg,,,cf,,, xnl,,i,,u,,
示例输出
dfg uli
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
using namespace std;
typedef char type;
typedef struct tnode
{
struct tnode *lc;
struct tnode *rc;
type data;
}tnode,*tree;
int i;
tree creat(tree &T,char s[])
{
if(s[i]==',')
{
T=NULL;
i++;
}
else
{
T=(tree)malloc(sizeof(tnode));
T->data=s[i];
i++;
T->lc=creat(T->lc,s);
T->rc=creat(T->rc,s);
}
return T;
}
void func(tree &T)
{
queue<tree>S;
if(T)
S.push(T);
while(!S.empty())
{
T=S.front();
S.pop();
if(T->lc)
S.push(T->lc);
if(T->rc)
S.push(T->rc);
if(T->lc==NULL&&T->rc==NULL)
printf("%c",T->data);
}
}
int main()
{
tree T;
char s[60];
while(~scanf("%s",s))
{
i=0;
T=creat(T,s);
func(T);
printf("\n");
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
using namespace std;
typedef char type;
typedef struct tnode
{
struct tnode *lc;
struct tnode *rc;
type data;
}tnode,*tree;
int i;
tree creat(tree &T,char s[])
{
if(s[i]==',')
{
T=NULL;
i++;
}
else
{
T=(tree)malloc(sizeof(tnode));
T->data=s[i];
i++;
T->lc=creat(T->lc,s);
T->rc=creat(T->rc,s);
}
return T;
}
void func(tree &T)
{
queue<tree>S;
if(T)
S.push(T);
while(!S.empty())
{
T=S.front();
S.pop();
if(T->lc)
S.push(T->lc);
if(T->rc)
S.push(T->rc);
if(T->lc==NULL&&T->rc==NULL)
printf("%c",T->data);
}
}
int main()
{
tree T;
char s[60];
while(~scanf("%s",s))
{
i=0;
T=creat(T,s);
func(T);
printf("\n");
}
return 0;
}