已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。
2abd,,eg,,,cf,,,xnl,,i,,u,,Example Output
abcdefgxnuli#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); printf("%c",p->data); if(p->lc) { enter_queue(p->lc); } if(p->rc) { enter_queue(p->rc); } }}int main(){ int t; char str[51]; bitree *tree; scanf("%d",&t); while(t--) { i=-1; scanf("%s",str); tree=pre_create(str); level_order(tree); printf("/n"); } return 0;}
新闻热点
疑难解答