数据结构实验之二叉树七:叶子问题
Problem Description
已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于50个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Sample Input
abd,eg,cf,
xnl,i,u,
Sample Output
dfg
uli
实话实说,这个键树函数有点看不懂,不太常规呀
题目要求 层序输出叶子节点;
#include <bits/stdc++.h>
using namespace std ;
char ch[10010] ;
int l;
struct node
{
char data ;
struct node *lc,*rc ;
};
void creat(struct node *&p)
{
char h = ch[l++] ;
if(h==',')
p = NULL ;
else
{
p = (struct node *)malloc(sizeof(struct node)) ;
p -> data = h ;
creat(p->lc) ;
creat(p->rc) ;
}
}
void cengxu(struct node *p)
{
if(p==NULL)
return ;
int i = 0,n=0;
struct node *a[10010] ;
a[n++] = p ;
while(i<n)
{
if(a[i])
{
if(a[i]->lc==NULL&&a[i]->rc==NULL)
printf("%c",a[i]->data) ;
if(a[i]->lc!=NULL)
a[n++] = a[i] ->lc ;
if(a[i]->rc!=NULL)
a[n++] = a[i] ->rc ;
}
i++;
}
}
int main()
{
struct node *p ;
while(~scanf("%s",ch))
{
l = 0 ;
creat(p);
cengxu(p);
printf("\n") ;
}
return 0 ;
}