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

来源:互联网 发布:centos 6.5 开启snmp 编辑:程序博客网 时间:2024/06/05 08:54

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

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

题目描述

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

输入

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

输出

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

示例输入

2abdegcfdbgeafcxnliulnixu

示例输出

dgebfcaabcdefglinuxxnuli

提示

 

来源

ma6174

示例程序

  #include<bits/stdc++.h>    using namespace std;    char s1[100],s2[100],ans[100];    typedef struct BiTNode    {        char data;        struct BiTNode *lchild,*rchild;    }BiTNode,*BiTree;    void build(BiTree &T,char *s1,char *s2,int n)//建立二叉树    {        if(n<=0) T=NULL;        else        {            int p=strchr(s2,s1[0])-s2;            T=new BiTNode;            T->data=s1[0];            build(T->lchild,s1+1,s2,p);//递归创建左子树            build(T->rchild,s1+p+1,s2+p+1,n-p-1);//递归创建右子树        }    }    void build1(int n,char *s1,char *s2,char *s)//根据前序遍历和中序遍历求后序遍历    {         if(n<=0) return ;         else         {             int p=strchr(s2,s1[0])-s2;             build1(p,s1+1,s2,s);             build1(n-p-1,s1+p+1,s2+p+1,s+p);             s[n-1]=s1[0];         }    }    void levelOrder(BiTree T)//层次遍历    {        BiTree p=T;        queue<BiTree>f;        f.push(p);        while(!f.empty())        {            p=f.front();            cout<<p->data;            f.pop();            if(p->lchild!=NULL)            {                f.push(p->lchild);            }            if(p->rchild!=NULL)            {                f.push(p->rchild);            }        }    }    int main()    {        BiTree T;        int n,len;        cin>>n;        while(n--)        {            cin>>s1>>s2;            len=strlen(s1);            build(T,s1,s2,len);            build1(len,s1,s2,ans);            ans[len]='\0';            cout<<ans<<endl;            levelOrder(T);            cout<<endl;        }        return 0;    }


0 0
原创粉丝点击