求二叉树的深度
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入
输入数据有多组,输入T组数据。每组数据包括两个长度小于<font face="\"Times" new="" roman,="" serif\"="" style="padding: 0px; margin: 0px;">50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
输出
输出二叉树的深度。
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
4 3
参考代码:
#include
#include
#include
struct node
{
char data; struct node *l,*r;
};
struct node *creat(char *pre,char *in ,int len)
{
struct node *p;
if (len<=0)
p=NULL;
else
{
p=(struct node *)malloc (sizeof (struct node ));
char *a;
p->data=*in;
for (a=pre;a!=NULL;a++)
if (*a==*in) break;
int lchild=a-pre;
p->r=creat(a+1,in-1,len-1-lchild);
p->l=creat(pre,in-len+lchild,lchild);
}
return p;
}
int getdepth (struct node *t)
{
int depth,l1,r1;
if (!t) return 0;
l1=getdepth (t->l);
r1=getdepth (t->r);
depth =(l1>r1?l1:r1)+1;
return depth;
}
int main()
{
int t; struct node *T;
char a[55],b[55];
scanf ("%d",&t);
while (t--)
{
scanf ("%s%s",a,b);
int l=strlen(a);
T=creat(a,&b[l-1],l);
printf("%d\n",getdepth(T));
}
return 0;
}