题目大意:给出对一棵二叉树先序遍历和中序遍历的顺序,找出后序遍历的顺序。
题目分析:无非就是对字符串的输出顺序做个变化,递归就行了。
代码如下:
# include<iostream> # include<cstdio> # include<string> # include<cstring> # include<algorithm> using namespace std; string p,q; int pos[26]; void f(int l1,int r1,int u,int l2,int r2) { if(l1<r1){ int minn=100,nu; for(int i=l1;i<=r1;++i){ if(minn>pos[i]){ minn=pos[i]; nu=i; } } f(l1,nu-1,nu,nu+1,r1); } if(l1==r1) printf("%c",q[l1]); if(l2<r2){ int minn=100,nu; for(int i=l2;i<=r2;++i){ if(minn>pos[i]){ minn=pos[i]; nu=i; } } f(l2,nu-1,nu,nu+1,r2); } if(l2==r2) printf("%c",q[l2]); printf("%c",q[u]); } int main() { while(cin>>p>>q) { int l=p.size(); for(int i=0;i<l;++i){ for(int j=0;j<l;++j) if(q[i]==p[j]){ pos[i]=j; break; } } int u; for(int i=0;i<l;++i) if(p[0]==q[i]){ u=i; break; } f(0,u-1,u,u+1,l-1); printf(" "); } return 0; }