1. 程式人生 > >資料結構實驗之二叉樹四:(先序中序)還原二叉樹

資料結構實驗之二叉樹四:(先序中序)還原二叉樹

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>

struct node
{
    char data;
    struct node *l,*r;
};

struct node *creat(int n,char a[],char b[])
{
    struct node *root;
    char *p;
    if(n==0)
        return NULL;
    root=(struct node *)malloc(sizeof(struct node));
    root->data=a[0];
    for(p=b;p!='\0';p++)
    {
        if(*p==a[0])
        {
             break;
        }
    }
    int t;
    t=p-b;
    root->l=creat(t,a+1,b);
    root->r=creat(n-t-1,a+t+1,p+1);
    return root;
};

int deep(struct node *root)
{
    int d=0;
    if(root)
    {
        int l1=deep(root->l);
        int l2=deep(root->r);
        if(l1>l2)
        {
            d=l1+1;
        }
        else
        {
            d=l2+1;
        }
    }
      return d;
}

int main()
{
  int n,m;
  char a[100],b[100];
  while(scanf("%d",&n)!=EOF)
  {
      struct node *root;
      scanf("%s",a);
      scanf("%s",b);
      root=creat(n,a,b);
      m=deep(root);
      printf("%d\n",m);
  }
  return 0;
}

在這裡插入圖片描述