还原二叉树

来源:互联网 发布:江苏省人工智能学会 编辑:程序博客网 时间:2024/04/30 12:36

题目描述

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入

输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。

输出

 输出一个整数,即该二叉树的高度。

示例输入

9 ABDFGHIECFDHGIBEAC

示例输出

5

提示

#include <stdio.h>
#include <stdlib.h>
struct node
{
   char data;
   struct node*l,*r;
};
struct node*creat(char a[],char b[],int n)
{
    struct node*t;
    char *p;
    if(n==0)
        return NULL;
    t=(struct node*)malloc(sizeof(struct node));
    t->data=a[0];
    for(p=b;p;p++)
    {
        if(*p==a[0])
            break;
    }
    int m=p-b;//m是代表个数左子树的如果是0就结束
    t->l=creat(a+1,b,m);//a数组的第一个元素就是根
    t->r=creat(a+1+m,p+1,n-1-m);
    return t;

}
int depth(struct node*t)
{
   int del,der;
   if(t)
   {
      del=depth(t->l);
      der=depth(t->r);
      if(del>der)
        return del+1;
      else return der+1;
   }
   return 0;
}
int main()
{
    struct node*t;
    int n,x;
    char a[60],b[60];
    while(~scanf("%d",&n))
    {
       scanf("%s",a);
       scanf("%s",b);
       t=creat(a,b,n);
       x=depth(t);
       printf("%d\n",x);
    }
    return 0;
}

 

0 0
原创粉丝点击