重建二叉树
#include<iostream> #include<memory.h> using namespace std; int K,N,M; int pre[1010],in[1010],post[1010],map[1010]; bool canRebuild; void reBuild(int low,int up){ if(up>=low){ int m=map[K++]; if( m==-1 || m<low || m>up){ canRebuild=false; return; } reBuild(low,m-1); reBuild(m+1,up); post[M++]=in[m]; } } int main(){ while(cin>>N){ for(int i=0;i<N;++i) cin>>pre[i]; for(int j=0;j<N;++j) cin>>in[j]; memset(map,-1,sizeof(map)); for(int i=0;i<N;++i) for(int j=0;j<N;++j) if(pre[i]==in[j]) map[i]=j; M=K=0; canRebuild=true; reBuild(0,N-1); if(canRebuild){ for(int i=0;i<N;++i) cout<<post[i]<<" "; }else cout<<"No"; cout<<endl; } }
posted on 2014-06-21 16:25 XiaoFei Wang 阅读(123) 评论(0) 编辑 收藏 举报