#include<bits/stdc++.h> using namespace std; vector<int> pre,post,in; void toPost(int root,int inL,int inR){ if(inL>inR){ return ; } // int k=inL; int k; while(k<inR&&in[k]!=pre[root]){ k++; } // cout<<"k="<<k<<endl;//2 int len=k-inL; toPost(root+1,inL,k-1); toPost(root+len+1,k+1,inR); post.push_back(pre[root]); } int main(){ int n; cin>>n; pre.resize(n); in.resize(n); for(int i=0;i<n;i++){ cin>>pre[i]; } for(int i=0;i<n;i++){ cin>>in[i]; } toPost(0,0,n-1); for(int i=0;i<post.size();i++){ cout<<post[i]<<" "; } return 0; }
输出结果:无
若去掉第2个注释:
输出结果:
???
#include<bits/stdc++.h> using namespace std; vector<int> pre,post,in; void toPost(int root,int inL,int inR){ if(inL>inR){ return ; } int k; for(int k=inL;k<=inR;k++){ if(in[k]==pre[root]){ break; } } cout<<"k="<<k<<endl; int len=k-inL; toPost(root+1,inL,k-1); toPost(root+len+1,k+1,inR); post.push_back(pre[root]); } int main(){ int n; cin>>n; pre.resize(n); in.resize(n); for(int i=0;i<n;i++){ cin>>pre[i]; } for(int i=0;i<n;i++){ cin>>in[i]; } toPost(0,0,n-1); for(int i=0;i<post.size();i++){ cout<<post[i]<<endl; } return 0; }
在第2个注释中重新定义了k
输出结果:
???