求二叉树的深度
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<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
char data;
struct node *l,*r;
}tree;
tree *creat(char *pre,char *in,int len)
{
tree *p;
if(len<=0)
p=NULL;
else
{
p=(tree *)malloc(sizeof(tree));
p->data=*(pre+len-1);
char *a;
for(a=in;a!=NULL;a++)
if(*a==*(pre+len-1))
break;
int l=a-in;
p->l=creat(pre,in,l);
p->r=creat(pre+l,a+1,len-l-1);
}
return p;
}
int deep(tree *t)
{
if(!t)
return 0;
int lchild,rchild;
lchild=deep(t->l);
rchild=deep(t->r);
return lchild>rchild?lchild+1:rchild+1;
}
int main()
{
int t;
scanf("%d",&t);
tree *T;
while(t--)
{
char str1[55],str2[55];
scanf("%s%s",str1,str2);
int l=strlen(str1);
T=creat(str2,str1,l);
printf("%d\n",deep(T));
}
}