还原二叉树
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define x (struct node *)malloc(sizeof(struct node))
int n,m,i;
char a[100],b[100];
struct node
{
char data;
struct node *lchild,*rchild;
};
struct node *creat(int n,char a[],char b[])
{
struct node *root;
int i;
if(n==0)
return NULL;
root=x;
root->data=a[0];
for(i=0; b[i]!='\0'; i++)
if(b[i]==a[0])
break;
root->lchild=creat(i,a+1,b);
root->rchild=creat(n-i-1,a+i+1,b+i+1);
return root;t
};
int height(struct node *t)
{
int u,v;
if (t==NULL) return 0;
u=height(t->lchild);
v=height(t->rchild);
if (u>v)
return (u+1);
return (v+1);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
struct node *root;
scanf("%s",a);
scanf("%s",b);
root=creat(n,a,b);
m=height(root);
printf("%d\n",m);
}
return 0;
}
思路讲解: