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

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

 

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

输入

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

输出

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

示例输入

2
abdegcf
dbgeafc
xnliu
lnixu

示例输出

dgebfca
abcdefg
linux
xnuli

提示

 

来源

ma6174

示例程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node
{
    char ch;
    struct node *lch,*rch;
}*A,M;

int find(char st,char a[],int l,int r)
{
    int k=l;
    while(a[k]!=st && k<=r)
        k++;
    return(k);
}

A creat(char pre[],char mid[],int n)
{
    A t;
    int k;
    if(n<=0)
        return NULL;
    else
    {
        k=find(pre[0],mid,0,n);
        t=(A)malloc(sizeof(M));
        t->ch=pre[0];
        t->lch=creat(pre+1,mid,k);
        t->rch=creat(pre+k+1,mid+k+1,n-k-1);
    }
    return(t);
}

void post(A f)
{
    if(f)
    {
        post(f->lch);
        post(f->rch);
        printf("%c",f->ch);
    }
}

void leavel(A f) 
{
    A V[1002],p;
    int front=0,area=0;
    if (f)
    {
        area++;
        V[area]=f;
        while (front<area)
        {
            front++;
            p=V[front];
            printf("%c",p->ch);
            if(p->lch)
            {
                area++;
                V[area]=p->lch;
            }
            if(p->rch)
            {
                area++;
                V[area]=p->rch;
            }
        }
    }
    return;
}

int main()
{
    int n;
    A f;
    char pre[1002],mid[1002];
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        scanf("%s%s",pre,mid);
        int len=strlen(pre);
        f=creat(pre,mid,len);
        post(f);
        printf("\n");
        leavel(f);
        printf("\n");
    }
    return 0;
}

 

posted @ 2014-11-15 16:54  夏迩  阅读(131)  评论(0)    收藏  举报