题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
#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 *head;
if(len<=0)
return NULL;
head = (tree *)malloc(sizeof(tree));
char *p;
head->data = *pre;
for(p = in;p!=NULL;p++)
if(*p == *pre) break;
int lon = p-in;
head->l = creat(pre+1,in,lon);
head->r = creat(pre+lon+1,p+1,len-lon-1);
return head;
}
int treedeep(tree *p)
{
int deep=0;
if(p)
{
int l=treedeep(p->l);
int r=treedeep(p->r);
deep=l>=r?l+1:r+1;
}
return deep;
}
int main()
{
int n;
int deep;
char s0[1000],s1[1000];
while(~scanf("%d",&n))
{
deep=0;
scanf("%s%s",s0,s1);
char *in,*pre;
pre = s0,in = s1;
int l=n;
tree * root = creat(pre,in,l);
deep=treedeep(root);
printf("%d\n",deep);
}
return 0;
}