后序中序——>前序

来源:互联网 发布:sql基础教程 第二版 编辑:程序博客网 时间:2024/05/17 09:13

给定一棵二叉树的后序遍历和中序遍历,请你输出其前序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的前序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:
72 3 1 5 7 6 41 2 3 4 5 6 7
输出样例:
4 1 3 2 6 5 7
代码实现
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <map>#include <vector>#include <set>#include <cmath>using namespace std;typedef long long  ll;const int maxn=65535;int in[50], post[50];typedef struct node{    int key;    struct node *lson, *rson;}*root;node* Bitree(int In[], int Post[], int N){    if(N==0)        return NULL;    node *Root = new node;    Root->key = Post[N-1];  // 在有N个几点的后序中最后一个节点是根节点    int i;    for(i=0; i<N; i++)    {        if(In[i]==Post[N-1])   //在中序中找出根节点,以左是左子树,以右是右子树            break;    }    Root->lson = Bitree( In, Post, i ); //建立左子树,i代表左子树的节点数;    Root->rson = Bitree( In+i+1, Post+i, N-i-1); //建立右子树,中序从第i+1个开始,后序从i开始,节点数为N-i-1;    return Root;}void outtree(node* Root){    if(Root!=NULL)    {        cout << Root->key <<" ";        outtree(Root->lson);        outtree(Root->rson);    }}int main(){    int N;    int i;    cin >> N;    for(i=0; i<N; i++)        cin >> post[i];    for(i=0; i<N; i++)        cin >> in[i];    node* root = Bitree(in,post,N); // (中序,后序,节点数)    outtree(root);    cout << endl;    return 0;}

1 0