数据结构----由中序遍历和后序遍历推导前序遍历;
7-17 根据后序和中序遍历输出先序遍历 (25 分)
#include<bits/stdc++.h> using namespace std; int prearray[35],midarray[35],postarray[35]; void solvefunc(int pre,int mid,int post,int n)//pre是先序的第一个点,mid,post同理,n是这个根下(包括根)的元素数量; { if (n==0) return; if (n==1) prearray[pre]=postarray[post]; int root=postarray[post+n-1],i; prearray[pre]=root; for (i=0;i<n;i++) if (midarray[mid+i]==root) break; int L=i,R=n-i-1;//求左右树的元素个数; solvefunc(pre+1,mid,post,L);//递归左子树求, solvefunc(pre+L+1,mid+L+1,post+L,R);//递归右子树求,均要注意传入参数写法; } int main() { int n; cin>>n; for (int i=0;i<n;i++) cin>>postarray[i]; for (int i=0;i<n;i++) cin>>midarray[i]; solvefunc(0,0,0,n); cout<<"Preorder:"<<" "; for (int i=0;i<n;i++) cout<<prearray[i]<<" "; return 0; }