HDU 1710 知道前序和中序求后序
原来的做法是开了一个数组存放由前序和中序求出来的树,但是空间浪费很大,一直RE
后来又想想,递归的时候就可以直接输出来了,不用开数组
自己写出来的AC代码,感觉还不错,先收藏起来
#include <stdio.h>
int qs[1005],zs[1005];
int n;
int fun1(int left,int k,int right){
for( ; left <= right ; left++){
if( qs[k] == zs[left] ) break;
}
return left;
}
void fun2(int g,int left,int mid,int right){
int i,j;
if( mid != left ) i = fun1(left,g+1,mid-1);
if( mid != right ) j = fun1(mid+1,g+mid-left+1,right);
if( mid > left ) fun2(g+1,left,i,mid-1);
if( right > mid ) fun2(g+mid-left+1,mid+1,j,right);
if( g == 1 ) printf("%d\n",qs[g]);
else printf("%d ",qs[g]);
}
int main(){
int i;
while(scanf("%d",&n)!=EOF){
for( i = 1 ; i <= n ; i++){
scanf("%d",&qs[i]);
}
for( i = 1 ; i <= n ; i++){
scanf("%d",&zs[i]);
}
for( i = 1; i <= n ; i++){
if(zs[i] == qs[1]) break;
}
fun2(1,1,i,n);
}
return 0;
}
浙公网安备 33010602011771号