题目链接:点击打开链接
数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
提示
代码实现:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct Tree
{
char data;
Tree *lchild,*rchild;
};
char a[110],b[110];
/*Tree *Creat(int n,char a[],char b[])
{
if(n == 0)
return NULL;
Tree *T;
char *p;
T = new Tree;
T->data = a[0];
for(p = b;*p != '\0';p++)
{
if(*p == a[0])
break;
}
int t = p - b;
T->lchild = Creat(t,a + 1,b);
T->rchild = Creat(n - t - 1,a + t + 1,p + 1);
return T;
}*/
Tree *Creat(int n,char a[],char b[])
{
if(n == 0)
return NULL;
Tree *T;
char *q,*p;
T = new Tree;
p = a,q = b;
T->data = a[0];
while(*q != *p)
q++;
int t = q - b;
T->lchild = Creat(t,a+1,b);
T->rchild = Creat(n - t - 1,a + t + 1,q + 1);
return T;
}
int Depth(Tree *T)
{
int ldepth,rdepth;
if(!T)
return 0;
else
{
ldepth = Depth(T->lchild);
rdepth = Depth(T->rchild);
return ldepth > rdepth ? ldepth+1 : rdepth+1;
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
Tree *T;
scanf("%s%s",a,b);
T = Creat(n,a,b);
printf("%d\n",Depth(T));
}
return 0;
}