数据结构实验之二叉树四:(先序中序)还原二叉树
Time Limit: 1000 ms
Memory Limit: 65536 KiB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Sample Input
9 ABDFGHIEC FDHGIBEAC
Sample Output
5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char num;
struct node *l,*r;
};
int z,m;
struct node *kk(char i[],int n,char j[],int b)
{
if(n<=0)
return NULL;
struct node *root;
root=(struct node *)malloc(sizeof(struct node ));
root->num=i[0];
int v,k;
for(v=0;v<n;v++)
if(i[0]==j[v])break;
k=b;
b++;
root->l=kk(i+1,v,j,b);
root->r=kk(i+v+1,n-v-1,j+v+1,b);
if(root->l==NULL&&root->r==NULL)
{
if(m<k)
m=k;
}
return root;
};
int main()
{
int a,b;
char i[1000],j[1000];
while(~scanf("%d",&a))
{
m=0;
scanf("%s %s",i,j);
b=1;
kk(i,a,j,b);
printf("%d\n",m);
}
return 0;
}