PAT甲级刷题日记(二)
作者:互联网
1020 Tree Traversals
Thu Jun 9 18:19
Link
25分
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
#define N 35
int n;
int post[N],in[N],lch[N],rch[N];
int level(int s1,int s2,int len){ // s1->in,s2->post
if(s1>=n||s2>=n||len<0||len>n) return -1;
int root=post[s2+len-1];
int pos=find(in,in+n,root)-in;
if(pos==n||pos<s1||pos>=s1+len) return -1;
lch[root]=level(s1,s2,pos-s1);
rch[root]=level(pos+1,s2+pos-s1,s1+len-pos-1);
return root;
}
void BFS(int root){
queue<int>q;
printf("%d",root);
if(lch[root]!=-1) q.push(lch[root]);
if(rch[root]!=-1) q.push(rch[root]);
while(!q.empty()){
root=q.front();
q.pop();
if(lch[root]!=-1) q.push(lch[root]);
if(rch[root]!=-1) q.push(rch[root]);
printf(" %d",root);
}
printf("\n");
}
int main() {
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&post[i]);
for(int i=0;i<n;++i)
scanf("%d",&in[i]);
int root=level(0,0,n);
BFS(root);
return 0;
}
标签:PAT,int,s2,s1,pos,甲级,include,root,刷题 来源: https://www.cnblogs.com/preccrep/p/16360710.html