鬼码(一)

#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

输出结果:

 

 ???

posted @ 2021-02-24 22:19  XA科研  阅读(157)  评论(0编辑  收藏  举报