http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/1845/pid/3343
#include <iostream>
#include <cstdio>#include <cstring>
using namespace std;
typedef struct tnode
{
char data;
tnode *lc,*rc;
}*tree;
void create(tree &t,char head[],char mid[],int hep,int midp,int n)
{
if(n==0) t=NULL;
else
{
int key;
int len=strlen(mid);
for(key=0;key<len;key++)
{
if(mid[key]==head[hep])
break;
}
t=new(tnode);
t->data=head[hep];
//左子树为空
if(key==midp) t->lc=NULL;
else create(t->lc,head,mid,hep+1,midp,key-midp);
//右子树为空
if(key==n+midp-1) t->rc=NULL;
else create(t->rc,head,mid,hep+1+(key-midp),key+1,n-1-(key-midp));
}
}
int height(tree &t)
{
int ld,rd;
if(!t) return 0;
else
{
ld=height(t->lc);
rd=height(t->rc);
if(ld>rd) return ld+1;
else return rd+1;
}
}
int main()
{
tree t;
int n;
char head[100],mid[100]; //先序及中序
while(cin>>n)
{
scanf("%s %s",head,mid);
create(t,head,mid,0,0,n);
cout<<height(t)<<endl;
}
return 0;
}