题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
提示
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
char data;
struct node *l;
struct node *r;
};
struct node *creat(char a[],char b[],int m)
{
char *q;
struct node *t;
if(m==0)
return NULL;
t=(struct node *)malloc(sizeof(struct node));
t->data=a[0];
for(q=b;q;q++)
{
if(*q==a[0])
break;
}
int k=q-b;
t->l=creat(a+1,b,k);
t->r=creat(a+k+1,q+1,m-k-1);
return t;
};
int depth(struct node *t)
{
int ldepth;
int rdepth;
if(t)
{
ldepth=depth(t->l);
rdepth=depth(t->r);
if(ldepth>rdepth)
return ldepth+1;
else
return rdepth+1;
}
return 0;
}
int main()
{
char a[55],b[55];
struct node *t;
int x,n;
while(~scanf("%d",&n))
{
scanf("%s",a);
scanf("%s",b);
t=creat(a,b,n);
x=depth(t);
printf("%d\n",x);
}
return 0;
}