菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
496
0

鬼码(一)

原创
05/13 14:22
阅读数 68060
#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

输出结果:

 

 ???

发表评论

0/200
496 点赞
0 评论
收藏
为你推荐 换一批