HLG2040二叉树遍历已知前中,求后

二叉树的遍历
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 60(34 users) Total Accepted: 34(30 users) Rating: Special Judge: No
Description
给出一棵二叉树的中序和前序遍历,输出它的后序遍历。
Input

本题有多组数据,输入处理到文件结束。

每组数据的第一行包括一个整数n,表示这棵二叉树一共有n个节点。

接下来的一行每行包括n个整数,表示这棵树的中序遍历。

接下来的一行每行包括n个整数,表示这棵树的前序遍历。

3<= n <= 100

Output
每组输出包括一行,表示这棵树的后序遍历。
Sample Input
7
4 2 5 1 6 3 7

1 2 4 5 3 6 7

 

Sample Output
4 5 2 6 7 3 1 
 
Source
2014 Winter Holiday Contest 5

 

 

 

 

 

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;

int n,num=0;
int kmp(int root,int str2[])
{
    int s=0;
    while(1)
    {
        if(str2[s]==root)
            return s;
        s++;
    }
    return 0;
}
void calculate(int m,int str1[],int str2[],int str3[] )
{
    if(m<=0)
        return ;
        int len=kmp(str1[0],str2);
    calculate(len,str1+1,str2,str3);
    calculate(m-len-1,str1+len+1,str2+len+1,str3);
    str3[num++]=str1[0];
}
int main()
{
        int n;
    int str1[105],str2[105],str3[105];
    while(scanf("%d",&n)!=EOF)
    {
        num=0;
        memset(str1,0,sizeof(str1));
        memset(str2,0,sizeof(str2));
        memset(str3,0,sizeof(str3));
        for(int i=0;i<n;i++)
            scanf("%d",&str2[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&str1[i]);
        calculate(n,str1,str2,str3);
        for(int i=0;i<n;i++)
            printf("%d ",str3[i]);
            printf("\n");
    }
    return 0;
}

 

你可能感兴趣的:(二叉树)