数据结构5

7-4 先序和中序构造二叉树;

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100010;

int n;
int pre[N],med[N],post[N];

int cnt;
void dfs(int pl,int pr,int ml,int mr){
    if(pl==pr){
        post[++cnt]=pre[pl];
        return;
    }
    int idx=ml;
    while(med[idx]!=pre[pl]&&idx<=n){
        idx++;
    }
    if(idx!=ml) dfs(pl+1,pl+(idx-ml),ml,idx-1);
    if(idx!=mr) dfs(pl+(idx-ml)+1,pr,idx+1,mr);
    post[++cnt]=pre[pl];
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>pre[i];
    }
    for(int i=1;i<=n;i++){
        cin>>med[i];
    }
    
    dfs(1,n,1,n);
    
    for(int i=1;i<=n;i++){
        cout<<post[i]<<" ";
    }
    return 0;
}

 

posted @ 2022-07-09 20:44  清梦韶华  阅读(31)  评论(0编辑  收藏  举报