注意判斷條件那個pr,pl位置不要寫反了。我兩次都寫錯了。
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
#define ll long long
const int N = 40;
int L[N],R[N];
int in[N],post[N];
int build(int pl,int pr,int il,int ir){
if(pr<pl) return -1;
int root=post[pr];
int i=il;
for(;i<=ir;i++){
if(in[i]==root){
break;
}
}
int lsize=i-il;
int rsize=ir-i;
L[root]=build(pl,pl+lsize-1,il,i-1);
R[root]=build(pr-rsize,pr-1,i+1,ir);
return root;
}
void bfs(int root){
queue<int> que;
que.push(root);
int count=0;
while(!que.empty()){
int x =que.front();
que.pop();
if(count) cout << " ";
cout <<x;
count++;
if(L[x]!=-1) que.push(L[x]);
if(R[x]!=-1) que.push(R[x]);
}
}
int main(){
int n;
cin>>n;
//後序
for(int i=0;i<n;i++) cin>>post[i];
for(int i=0;i<n;i++) cin>>in[i];
int root = build(0,n-1,0,n-1);
bfs(root);
return 0;
}