H - 数据结构实验之二叉树四:(先序中序)还原二叉树
Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Sample
Input
9
ABDFGHIEC
FDHGIBEAC
Output
5
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node*lchild,*rchild;
} Tree;
Tree*Create(char pre[],char mid[],int len)
{
Tree *t;
if(len==0)
{
return NULL;
}else
{
int k;
for(int i=0;i<len;i++)
{
if(mid[i]==pre[0])
{
k=i;break;
}
}
t=(Tree*)malloc(sizeof(Tree));
t->data=pre[0];
t->rchild=Create(pre+1,mid,k);
t->lchild=Create(pre+k+1,mid+k+1,len-k-1);
}
return t;
}
int CountHeight(Tree*t)
{
if(t)
{
int h1=CountHeight(t->lchild);
int h2=CountHeight(t->rchild);
int m=max(h1,h2);
return m+1;
}else
return 0;
}
int main()
{
int len;
while(scanf("%d",&len)!=EOF)
{
char pre[len+1];
char mid[len+1];
scanf("%s",pre);
scanf("%s",mid);
Tree*t=(Tree*)malloc(sizeof(Tree));
t=Create(pre,mid,len);
cout<<CountHeight(t)<<endl;
}
}