HDU 1710 前中序求后序

Posted on 2011-08-02 20:07  continue_n  阅读(429)  评论(0)    收藏  举报

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;
}

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3