数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
Hint
Author
xam
#include<stdio.h>
typedef struct tree
{
char data;
tree * l,*r;
}tree;
tree * creat(char a[],char b[],int n)
{
tree * p;
char * q;
if(n==0)
return NULL;
else
{
p=new tree;
p->data=a[0];
for(q=b;q!='\0';q++)
{
if(*q==a[0])
break;
}
int t;
t=q-b;
p->l=creat(a+1,b,t);
p->r=creat(a+t+1,q+1,n-t-1);
}
return p;
}
int deep(tree * p)
{
int d=0,dl,dr;
if(p)
{
dl=deep(p->l);
dr=deep(p->r);
d=dl>dr?dl+1:dr+1;
}
return d;
}
int main()
{
int n;
tree * p;
char a[100],b[100];
while(scanf("%d",&n)!=EOF)
{
scanf("%s%s",a,b);
p=creat(a,b,n);
printf("%d\n",deep(p));
}
return 0;
}