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

来源:互联网 发布:淘宝电影 编辑:程序博客网 时间:2024/04/28 11:44

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2137&cid=1796

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

2abdegcfdbgeafcxnliulnixu

示例输出

dgebfcaabcdefglinuxxnuli

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<queue>using namespace std;typedef char type;typedef struct tnode{    struct tnode *lc;    struct tnode *rc;    type data;}tnode,*tree;tree creat(char *bef,char *mid,int len){    tree T;    if(len<=0)        return NULL;    T=(tree)malloc(sizeof(tnode));    char *p;    T->data=*bef;    for(p=mid;p!=NULL;p++)        if(*p==*bef)            break;    int llen=p-mid;    T->lc=creat(bef+1,mid,llen);    T->rc=creat(bef+llen+1,p+1,len-llen-1);    return T;}void hinorder(tree &T)//后序输出{    if(T)    {        hinorder(T->lc);        hinorder(T->rc);        printf("%c",T->data);    }}void levorder(tree &T)//层序输出{    queue<tree>S;    if(T)    {        printf("%c",T->data);        S.push(T);    }    while(!S.empty())    {        T=S.front();        S.pop();        if(T->lc)        {            printf("%c",T->lc->data);            S.push(T->lc);        }        if(T->rc)        {            printf("%c",T->rc->data);            S.push(T->rc);        }    }}int main(){    tree T;    char befs[60],mids[60];    int t,len;    scanf("%d",&t);    while(t--)    {        scanf("%s\n%s",befs,mids);        len=strlen(befs);        T=creat(befs,mids,len);        hinorder(T);        printf("\n");        levorder(T);        printf("\n");    }    return 0;}


0 0
原创粉丝点击