数据结构实验之求二叉树后序遍历和层次遍历

来源:互联网 发布:琅琊榜网络播放量 编辑:程序博客网 时间:2024/05/19 12:17

数据结构实验之求二叉树后序遍历和层次遍历

Time Limit: 1000MS Memory limit: 65536K

题目描述

 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。

输入

 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。

输出

每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列

示例输入

2abdegcfdbgeafcxnliulnixu

示例输出

dgebfcaabcdefglinuxxnuli

提示

 

来源

ma6174

示例程序

 
  • 提交 
  • 状态

#include<stdio.h>#include<stdlib.h>#include<string.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1#define MAXQSIZE 100typedef int Status;typedef char TElemType;typedef struct BiTNode{    TElemType data;    struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;typedef BiTree QElemType;typedef struct{    QElemType *base;    int front;    int rear;} SqQueue;Status InitQueue(SqQueue *Q){    (*Q).base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));    if(!(*Q).base)        exit(OVERFLOW);    (*Q).front=(*Q).rear=0;    return OK;}Status QueueEmpty(SqQueue Q){    if(Q.front==Q.rear)        return TRUE;    else        return FALSE;}Status EnQueue(SqQueue *Q,QElemType e){    if(((*Q).rear+1)%MAXQSIZE==(*Q).front)        return ERROR;    (*Q).base[(*Q).rear]=e;    (*Q).rear=((*Q).rear+1)%MAXQSIZE;    return OK;}Status DeQueue(SqQueue *Q,QElemType *e){    if((*Q).front==(*Q).rear)        return ERROR;    *e=(*Q).base[(*Q).front];    (*Q).front=((*Q).front+1)%MAXQSIZE;    return OK;}BiTree  CreateBiTree(char *qian,char *zhong,int len){    if(len<=0)return NULL;    BiTNode *T;    T=(BiTree)malloc(sizeof(BiTNode));    T->data=*qian;    char *p;    for(p=zhong;p;p++)        if(*p==*qian)        break;    int k;    k=p-zhong;    T->lchild=CreateBiTree(qian+1,zhong,k);    T->rchild=CreateBiTree(qian+1+k,p+1,len-k-1);    return T;}Status visitT(TElemType e){    printf("%c",e);    return OK;}Status houxu(BiTree T,Status(*Visit)(TElemType)){    if(T)    {        if(houxu(T->lchild,Visit))            if(houxu(T->rchild,Visit))                  if(Visit(T->data))return OK;        return ERROR;    }    else return OK;}void LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType)){    SqQueue Q;    BiTree P;    InitQueue(&Q);    if(T) EnQueue(&Q,T);    while(Q.front != Q.rear)    {        DeQueue(&Q,&P);        Visit(P->data );        if (P->lchild) EnQueue(&Q, P->lchild);        if (P->rchild) EnQueue(&Q, P->rchild);    }    return ;}int main(){    int n;    char qian[51],zhong[51];    scanf("%d",&n);    while(n--)    {        scanf("%s%s",qian,zhong);        BiTree T;        int len=strlen(qian);        T=CreateBiTree(qian,zhong,len);        houxu(T,visitT);        printf("\n");        LevelOrderTraverse(T,visitT);        printf("\n");    }    return 0;}

0 0
原创粉丝点击