sdut oj3343 数据结构实验之二叉树四:还原二叉树

来源:互联网 发布:r语言mac版 编辑:程序博客网 时间:2024/05/20 16:44

题目链接:点击打开链接

数据结构实验之二叉树四:还原二叉树

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

9 ABDFGHIECFDHGIBEAC

示例输出

5

提示

 

 

代码实现:

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;struct Tree{    char data;    Tree *lchild,*rchild;};char a[110],b[110];/*Tree *Creat(int n,char a[],char b[]){    if(n == 0)        return NULL;    Tree *T;    char *p;    T = new Tree;    T->data = a[0];    for(p = b;*p != '\0';p++)    {        if(*p == a[0])            break;    }    int t = p - b;    T->lchild = Creat(t,a + 1,b);    T->rchild = Creat(n - t - 1,a + t + 1,p + 1);    return T;}*/Tree *Creat(int n,char a[],char b[]){    if(n == 0)        return NULL;    Tree *T;    char *q,*p;    T = new Tree;    p = a,q = b;    T->data = a[0];    while(*q != *p)        q++;    int t = q - b;    T->lchild = Creat(t,a+1,b);    T->rchild = Creat(n - t - 1,a + t + 1,q + 1);    return T;}int Depth(Tree *T){    int ldepth,rdepth;    if(!T)        return 0;    else    {        ldepth = Depth(T->lchild);        rdepth = Depth(T->rchild);        return ldepth > rdepth ? ldepth+1 : rdepth+1;    }}int main(){    int n;    while(~scanf("%d",&n))    {        Tree *T;        scanf("%s%s",a,b);        T = Creat(n,a,b);        printf("%d\n",Depth(T));    }    return 0;}


 

0 0