PRoblem Description
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于50个字符的字符串。Output
按从上到下从左到右的顺序输出二叉树的叶子结点。Example Input
abd,,eg,,,cf,,,xnl,,i,,u,,Example Output
dfguli#include<stdio.h>#include<string.h>#include<stdlib.h>#define maxsize 50typedef struct node{ char data; struct node *lc,*rc;}bitree;bitree *queue[51];int front=0,rear=0;int i=-1;bitree * pre_create(char str[51]){ bitree * t; if(str[++i]!=',') { t=(bitree *)malloc(sizeof(bitree)); t->data=str[i]; t->lc=pre_create(str); t->rc=pre_create(str); } else { t=NULL; } return t;}void enter_queue(bitree * t){ if((rear+1)%maxsize!=front) { rear=(rear+1)%maxsize; queue[rear]=t; }}bitree * delete_queue(bitree * t){ if(rear!=front) { front=(front+1)%maxsize; return queue[front]; }}void level_order(bitree * t){ bitree * p; if(t) { enter_queue(t); } while(front!=rear) { p=delete_queue(t); if(p->lc) { enter_queue(p->lc); } if(p->rc) { enter_queue(p->rc); } if(p->lc==NULL&&p->rc==NULL) { printf("%c",p->data); } }}int main(){ char str[51]; bitree *tree; while(scanf("%s",str)!=EOF) { i=-1; tree=pre_create(str); level_order(tree); printf("/n"); } return 0;}
新闻热点
疑难解答