PKU 1577 Falling Leaves

http://poj.org/problem?id=1577
二分探索木を作って、root-left-rightという感じで表示しろというような問題。

いろいろと適当なコードな気がしますが、面倒くさかったのこれで。

typedef struct _node{
  char val;
  _node* le;
  _node* ri;
  _node(char c){
    val=c;
    le=NULL;
    ri=NULL;
  }
}node;
string in[27];
int sz=0;

void insert(char ch,node*&p){
  if(p==NULL){
    p=new node(ch);
    return;
  }

  if(p->val>ch)insert(ch,p->le);
  else insert(ch,p->ri);
}

void pr(node*p){
  if(p==NULL)return;
  cout<<p->val;  
  pr(p->le);
  pr(p->ri);
}

main(){
  while(true){
    sz=0;
    while(cin>>in[sz]){
      if(in[sz]=="*")break;
      if(in[sz]=="$")break;
      ++sz;
    }
    node* root=0;
    for(int i=sz-1;i>=0;--i){
      const string& str=in[i];
      rep(j,SZ(str))insert(str[j],root);
    }
    pr(root);
    cout<<endl;
    if(in[sz]=="$")return 0;
  }
}