1020 Tree Traversals (25分)(樹的構造:後序+中序->層序)
阿新 • • 發佈:2020-08-16
題目
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 <bits/stdc++.h> using namespace std; typedef long long ll; pair<int,int> 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); queue<int>Q; Q.push(n); cout<<post[n]; while(!Q.empty()) { int t=Q.front(); Q.pop(); if(tree[t].first!=0) Q.push(tree[t].first); if(tree[t].second!=0) Q.push(tree[t].second); if(t!=n) cout<<" "<<post[t]; } return 0; }