本题目要求用先序序列和后序序列构造一棵正则二叉树(树中结点个数不超过10个),并输出其中序序列。
输入格式:
在第一行中输入元素个数。
第二行中输入先序序列,用空格分隔。
第三行中输入后序序列,用空格分隔。
输出格式:
输出此正则二叉树的中序序列,用空格分隔,最后也有一个空格。
样例">输入样例:
1. 5 2. 10 20 30 40 50 3. 20 40 50 30 10
输出样例:
20 10 40 30 50
#include<bits/stdc++.h> using namespace std; const int N = 20; int a[N],b[N]; vector<int>ans; void get_zhong(int l1,int r1,int l2,int r2) { if(l1 == r1) { ans.push_back(a[l1]); return ; } if(a[l1] == b[r2]) { int i = l1 + 1; while(i <= r1 && a[i] != b[r2 - 1]) i++; if(i - l1 > 1) get_zhong(l1+1,i-1,l2,l2 + (i - l1 - 1) - 1); ans.push_back(b[r2]); get_zhong(i,r1,l2 + (i - l1 - 1),r2-1); } } int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) cin>>b[i]; get_zhong(0,n-1,0,n-1); for(int i=0;i<ans.size();i++) cout<<ans[i]<<' '; return 0; }