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

来源:互联网 发布:南昌seo自动优化软件 编辑:程序博客网 时间:2024/04/29 23:50

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=3343&cid=1796

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

9 ABDFGHIECFDHGIBEAC

示例输出

5

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<queue>using namespace std;typedef char type;typedef struct tnode{    struct tnode *lc;    struct tnode *rc;    type data;}tnode,*tree;tree creat(char *bef,char *mid,int len){    tree T;    if(len<=0)        return NULL;    T=(tree)malloc(sizeof(tnode));    char *p;    T->data=*bef;    for(p=mid;p!=NULL;p++)        if(*p==*bef)            break;    int llen=p-mid;    T->lc=creat(bef+1,mid,llen);    T->rc=creat(bef+llen+1,p+1,len-llen-1);    return T;}int countdepth(tree &T){    int ldepth,rdepth;    if(!T)        return 0;    else    {        ldepth=countdepth(T->lc);        rdepth=countdepth(T->rc);        return ldepth>rdepth?ldepth+1:rdepth+1;    }}int main(){    tree T;    char befs[60],mids[60];    int len,depth;    while(~scanf("%d",&len))    {        scanf("%s\n%s",befs,mids);        T=creat(befs,mids,len);        depth=countdepth(T);        printf("%d\n",depth);    }    return 0;}


0 0