数据结构课程设计2022夏7-4 先序和中序构造二叉树

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

本题目要求用先序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其后序序列。

输入格式:

在第一行中输入元素个数。

第二行中输入先序序列,用空格分隔。

第三行中输入中序序列,用空格分隔。

输出格式:

输出此二叉树的后序序列,用空格分隔,最后也有一个空格。

输入样例:

5
10 20 30 40 50
20 10 40 30 50
 

输出样例:

20 40 50 30 10 
 
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#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-19 17:44  zrswheart  阅读(88)  评论(0编辑  收藏  举报