数据结构实验之二叉树八:(中序后序)求二叉树的深度
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2
dbgeafc
dgebfca
lnixu
linux
Example Output
4
3
Hint
Author
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[55],b[55];
struct node
{
char data;
struct node *lchild, *rchild;
};
struct node *creat(char a[],char b[],int len)//建立二叉树
{
struct node *t;
int i;
if(len==0)
t = NULL;
else
{
t = (struct node *)malloc(sizeof(struct node));
t -> data = b[len-1];
for(i = 0;i < len;i++)
{
if(a[i]==b[len-1])
break;
}
t -> lchild = creat(a,b,i);//左子树部分的位置
t -> rchild = creat(a+i+1,b+i,len-i-1);//右子树部分的位置
}
return t;
}
int depth(struct node *t)
{
int depthval;
if(t==NULL)return 0;
else
{
int depthleft = depth(t->lchild);
int depthright = depth(t -> rchild);
if(depthleft > depthright)
depthval = depthleft +1;
else depthval = depthright + 1;
}
return depthval;
}
int main()
{
int t;
while(~scanf("%d",&t))
{
while(t--)
{
struct node *T;
int len;
scanf("%s",a);
scanf("%s",b);
len = strlen(a);
T = creat(a,b,len);
printf("%d\n",depth(T));
}
}
return 0;
}