您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之二叉树八:(中序后序)求二叉树的深度

2017-11-11 11:37 375 查看
数据结构实验之二叉树八:(中序后序)求二叉树的深度

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 二叉树
相关文章推荐