数据结构课程设计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; }