二叉树——多组输入,知先、中序,输出后序

来源:互联网 发布:javascript教程pdf下载 编辑:程序博客网 时间:2024/06/16 11:59

Description

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

Input

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

Output

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

Sample Input

2abdegcfdbgeafcxnliulnixu

Sample Output

dgebfcaabcdefglinuxxnuli

#include <iostream>#include"cstdio"#include"cstring"#include"cstdlib"using namespace std;char pre[1050],ins[1050],ans[1050];struct node{    int data;    node *lch,*rch;};node *buildtree(char*pre,char*ins,int n){    int k=0;    node *p;    char *q;    if(n<=0)return NULL;    p=(node *)malloc(sizeof(node));    p->data=*pre;    for(q=&ins[0];q<ins+n;q++)        if(*q==*pre)break;        k=q-ins;        p->lch=buildtree(pre+1,ins,k);        p->rch=buildtree(pre+1+k,q+1,n-k-1);        return p;}void houxu(node*p){    if(p!=NULL)    {        houxu(p->lch);        houxu(p->rch);        printf("%c",p->data);    }}void cengci(node *p){    int jin=0,chu=0;    node *q[1050];    q[jin++]=p;   while(jin>chu)   {       if(q[chu]!=NULL)       {           printf("%c",q[chu]->data);           q[jin++]=q[chu]->lch;           q[jin++]=q[chu++]->rch;       }       else chu++;   }}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%s%*c%s",pre,ins);        int n=strlen(pre);        node *tree;        tree=(node *)malloc(sizeof(node));       tree=buildtree(pre,ins,n);        houxu(tree);        putchar('\n');        cengci(tree);        putchar('\n');    }    return 0;}

0 0
原创粉丝点击