数据结构实验之二叉树七:叶子问题
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于50个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Example Input
abd,,eg,,,cf,,,
xnl,,i,,u,,
Example Output
dfg
uli
Hint
这题其实也没啥,不过就是层序遍历而已,我却搞那么一会没出来,居然还想要先还原整棵树再搞,还是之前的东西没学通透啊!看来以后还得努力仔细的学。
#include <stdio.h>
#include <stdlib.h>
int i;
typedef struct node
{
char data;
struct node *l,*r;
}node;
node *create(char *str)
{
node *root;
if(str[i]==','){
i++;
root = NULL;
}
else{
root = (node *)malloc(sizeof(struct node));
root->data = str[i++];
root->l = create(str);
root->r = create(str);
}
return root;
}
void *print_leaves(node *root)
{
if(root==NULL)
return 0;
int in = 0,out = 0;
node *temp[100];
temp[in++] = root;
while(in>out){
if(temp[out]){
if(temp[out]->l==NULL&&temp[out]->r==NULL)
printf("%c",temp[out]->data);
else{
temp[in++] = temp[out]->l;
temp[in++] = temp[out]->r;
}
}
out++;
}
}
int main()
{
char str[100];
while(~scanf("%s",str)){
i = 0;
node *root = create(str);
print_leaves(root);
printf("\n");
}
return 0;
}