1020 Tree Traversals (25分)(树的构造:后序+中序->层序)


题目

https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072

题意

给出后序+中序,输出层序

Sample Input:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

Sample Output:

4 1 6 3 5 7 2

code

#include 
using namespace std;
typedef long long ll;
pair tree[40];
int post[40],in[40];
void create(int a,int b,int c,int d)
{
    if(a>=b) return ;//不再有子树,停止

    int i;
    for(i=c;i<=d;++i) if(in[i]==post[b]) break;
    //一定要注意if()中的情况
    if(i!=c) {
        tree[b].first=a+(i-c)-1;
        create(a,tree[b].first,c,i-1);
    }
    if(i!=d) {
        tree[b].second=b-1;
        create(b-1-(d-i-1),b-1,i+1,d);
    }

}
int main()
{
    int n; cin>>n;
    for(int i=1;i<=n;++i) cin>>post[i];
    for(int i=1;i<=n;++i) cin>>in[i];
    create(1,n,1,n);

    queueQ;
    Q.push(n);
    cout<

相关