Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Sample
Input
9
ABDFGHIEC
FDHGIBEAC
Output
5
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node *l, *r;
} Tree;
char pre[55], mid[55];
Tree *creat(char *pre, char *mid, int len)
{
Tree *root;
if(len == 0)
return NULL;
root = new Tree;
root->data = pre[0];
int i;
for(i = 0; i < len; i++)
{
if(mid[i] == pre[0])
break;
}
root->l = creat(pre + 1, mid, i);
root->r = creat(pre + i + 1, mid + i + 1, len - i -1);
return root;
}
int depth_bintree(Tree *root)
{
int de = 0;
if(root)
{
int left_depth = depth_bintree(root->l);
int right_depth = depth_bintree(root->r);
de = left_depth > right_depth ? left_depth + 1 : right_depth + 1;
}
return de;
}
int main()
{
int n;
while(~scanf("%d", &n))
{
scanf("%s", pre);
scanf("%s", mid);
Tree *root = creat(pre, mid, n);
int depth= depth_bintree(root);
printf("%d\n", depth);
}
return 0;
}