其他分享
首页 > 其他分享> > PAT甲级刷题日记(二)

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