题目链接:点击打开链接
数据结构实验之二叉树七:叶子问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
输入
输入数据有多行,每一行是一个长度小于
50个字符的字符串。
输出
按从上到下从左到右的顺序输出二叉树的叶子结点。
示例输入
abd,,eg,,,cf,,, xnl,,i,,u,,
示例输出
dfg uli
提示
代码实现:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
char s[110];
int len;
struct Tree
{
char data;
Tree *lchild,*rchild;
};
Tree *T;
int i;
Tree *Creat(Tree *T)
{
if(s[i++] == ',')
T = NULL;
else
{
T = new Tree;
T->data = s[i-1];
T->lchild = Creat(T->lchild);
T->rchild = Creat(T->rchild);
}
return T;
}
void CountTree(Tree *T)
{
if(!T)
return;///注意判断,否则会越界,RE
Tree *p[110];
int pu = 0,po = 0;
p[pu++] = T;
while(pu > po)
{
if((!p[po]->lchild)&&(!p[po]->rchild))
printf("%c",p[po]->data);
if(p[po]->lchild)
p[pu++] = p[po]->lchild;
if(p[po]->rchild)
p[pu++] = p[po]->rchild;
po++;
}
}
int main()
{
while(~scanf("%s",s))
{
Tree *P;
i = 0;///注意归零
P = Creat(T);
CountTree(P);
printf("\n");
}
return 0;
}