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

来源:互联网 发布:淘宝店铺有几种 编辑:程序博客网 时间:2024/06/03 05:07

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

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

题目描述

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

输入

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

输出

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

示例输入

2abdegcfdbgeafcxnliulnixu

示例输出

dgebfcaabcdefglinuxxnuli



#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{    char data ;    struct node *l,*r;};struct node *build (char *a,char *b,int n){    int k=0;    struct node *p;    char *new;    if (n<=0)        return NULL;    p=(struct node *)malloc(sizeof (struct node ));    p->data=*a;    for (new=&b[0];new <b+n;new++)    {        if (*new==*a)            break;    }    k=new-b;    p->l=build (a+1,b,k);    p->r=build (a+1+k,new+1,n-1-k);    return p;}void last (struct node *p){    if (p!=NULL)    {        last (p->l);        last (p->r);        printf ("%c",p->data);    }}void cengci (struct node *t)//层次遍历,利用队列的思想{    int a=0,s=1;//a表示当前层,s表示下一层    struct node *p[10000];    p[0]=t;    while (a<s)    {        if (p[a])        {           printf("%c",p[a]->data);           p[s]=p[a]->l;//先左后右,个数+1;层不变          s++;           p[s]=p[a]->r;           a++;s++;//个数层数都加1        }        else        {            a++;        }    }}int main (){    int t,n;    char a[100],b[100];    while (~scanf ("%d",&t))    {        while (t--)        {            struct node *tree;            scanf ("%s%s",a,b);            n=strlen (a);            tree=build (a,b,n);            last (tree);            printf ("\n");            cengci (tree);            printf ("\n");        }    }    return 0;}



0 0
原创粉丝点击