PAT (Advanced Level) Practise 1020 Tree Traversals (25)

来源:互联网 发布:mac ppt演讲者模式切换 编辑:程序博客网 时间:2024/05/21 22:53

1020. Tree Traversals (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.

Sample Input:
72 3 1 5 7 6 41 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2



题意:给你一棵树的后序遍历和中序遍历,输出这棵树的层序遍历



#include<queue>    #include<cmath>    #include<cstdio>    #include<string>    #include<cstring>    #include<iostream>    #include<algorithm>        using namespace std;        const int maxn = 50;    int n, a[maxn], b[maxn], c[maxn][2];        int dfs(int l,int r,int ll,int rr)    {        if(r<l||rr<ll) return 0;        for(int i=ll;i<=rr;i++)        {            if(a[r]==b[i])            {                c[a[r]][0]=dfs(l,l+i-ll-1,ll,i-1);                c[a[r]][1]=dfs(l+i-ll,r-1,i+1,rr);            }        }        return a[r];    }        int main()    {        while(~scanf("%d",&n))        {            for(int i=1;i<=n;i++) scanf("%d",&a[i]);            for(int i=1;i<=n;i++) scanf("%d",&b[i]);            dfs(1,n,1,n);            queue<int>q;            q.push(a[n]);            int flag=0;            while(!q.empty())            {                if(flag) printf(" ");                else flag=1;                int e=q.front();                q.pop();                printf("%d",e);                if(c[e][0]) q.push(c[e][0]);                if(c[e][1]) q.push(c[e][1]);            }            printf("\n");        }        return 0;    }   

阅读全文
0 0
原创粉丝点击