给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *List;
struct Node{
char Data;
List L;
List R;
};
List huanyuan(char a[],int i,int j,char b[],int k,int h)
{
if(i>j||k>h)
return NULL;
List L=(List)malloc(sizeof(struct Node));
L->Data=a[i];
int m = k;
while(b[m]!=a[i])
m++;
if(m==k)
L->L=NULL;
else
L->L=huanyuan(a,i+1,i+m-k,b,k,m-1);
if(m==h)
L->R=NULL;
else
L->R=huanyuan(a,i+m-k+1,j,b,m+1,h);
return L;
}
int GetHeight( List BT )
{
if(BT==NULL)
return 0;
int l,r;
l=GetHeight(BT->L);
r=GetHeight(BT->R);
return 1+(l>=r?l:r);
}
int main()
{
int n,i;
scanf("%d",&n);
char a[55],b[55];
scanf("%s",a);
scanf("%s",b);
List L=huanyuan(a,0,n-1,b,0,n-1);
printf("%d",GetHeight(L));
return 0;
}