www.pudn.com > zhejiang_university_acm_onlinejudge_code.rar > zp1062.cpp


//--------------------------------------------------------------------------- 
 
#include  
#pragma hdrstop 
 
//--------------------------------------------------------------------------- 
 
#pragma argsused 
#include  
 
struct Node 
{ 
   struct Node* left; 
   struct Node* right; 
}; 
struct Node* root; 
int a[19]; 
 
void cal(int n, int m, struct Node* cur) 
{ 
  int i=0; 
  while (n>a[i]*a[m-1-i]) 
  { 
    n-=a[i]*a[m-1-i]; 
    i++; 
  } 
 
  if (i) 
  { 
    cur->left=new(struct Node); 
    cur->left->left=NULL; 
    cur->left->right=NULL; 
    cal((n-1)/a[m-1-i]+1,i,cur->left); 
  } 
  if (m-1-i) 
  { 
    cur->right=new(struct Node); 
    cur->right->left=NULL; 
    cur->right->right=NULL; 
    cal((n-1)%a[m-1-i]+1,m-1-i,cur->right); 
  } 
} 
void pre_travel(struct Node* cur) 
{ 
  printf("("); 
  if(cur->left!=NULL) pre_travel(cur->left); 
  printf("X"); 
  if(cur->right!=NULL) pre_travel(cur->right); 
  printf(")"); 
} 
int main(int argc, char* argv[]) 
{ 
  int d[19], 
      m,n,i,j; 
  a[0]=1; 
  d[0]=0; 
  a[1]=1; 
  d[1]=1; 
  for (i=2;i<=18;i++) 
  { 
    a[i]=0; 
    for (j=0;jleft=NULL; 
    root->right=NULL; 
 
    cal(n,m,root); 
 
    if(root->left!=NULL) 
      pre_travel(root->left); 
    printf("X"); 
    if(root->right!=NULL) 
      pre_travel(root->right); 
    printf("\n"); 
 
  } 
  return 0; 
} 
//---------------------------------------------------------------------------