Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输出
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
提示
来源
示例程序
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;
struct node *lchild,*rchild;
}tree;
tree *creat(char *pre,char *ino,int len)
{
if(len<=0)
return NULL;
tree *root;
root=(tree *)malloc(sizeof(tree));
root->data=*pre; //确定根节点
char *a;
for(a=ino;a!=NULL;a++)
if(*a==*pre) //找到先序序列中确定的根节点
break;
int k=a-ino; //遍历过的中序序列元素
root->lchild=creat(pre+1,ino,k);
root->rchild=creat(pre+1+k,a+1,len-k-1);
return root;
}
int deep(tree *root)
{
if(!root)
return 0;
int m,n;
m=deep(root->lchild);
n=deep(root->rchild);
return m>n?m+1:n+1;
}
int main()
{
int len;
char pre[51],ino[51];
tree *root;
while(scanf("%d",&len)!=EOF)
{
scanf("%s%s",pre,ino);
root=creat(pre,ino,len);
printf("%d\n",deep(root));
}
return 0;
}