SDUT OJ数据结构实验之二叉树四:(先序中序)还原二叉树

数据结构实验之二叉树四:(先序中序)还原二叉树

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

Problem Description

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

Input

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

Output

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

Sample Input

9 
ABDFGHIEC
FDHGIBEAC

Sample Output

5

Hint

Source

xam

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct st
{
    struct st *l,*r;
    char data;
} tree;
tree *creat(int n,char a[],char b[])
{
    tree *root;
    char *p;
    if(n==0)return NULL;
    root=(tree *)malloc(sizeof(tree));
    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+1+t,p+1);
    return root;
}
int shen(tree *t)
{
    if(t)
    {
        int l1=shen(t->l)+1;
        int r1=shen(t->r)+1;
        if(l1>r1)return l1;
        else return r1;
    }
    return 0;

}
int main()
{
    char a[101],b[101];
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%s",a);
        scanf("%s",b);
        tree *t;
        t=creat(n,a,b);
        int kk=shen(t);
        printf("%d\n",kk);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41374539/article/details/81231484
今日推荐