您的位置:首页 > 理论基础 > 数据结构算法

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

2016-08-11 22:04 239 查看

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

9
ABDFGHIEC
FDHGIBEAC


示例输出

5


提示

 

来源

 xam

示例程序

#include<stdio.h> 

#include<stdlib.h>   

typedef struct node 



    char data; 

    struct node *lchild,*rchild; 

}tree; 

 

tree *creat(char *pre,char *ino,int len) 



  

    if(len<=0) 

        return NULL;

  tree *root; 

     root=(tree *)malloc(sizeof(tree)); 

        root->data=*pre; //确定根节点

        char *a; 

        for(a=ino;a!=NULL;a++) 

            if(*a==*pre)  //找到先序序列中确定的根节点

            break; 

        int k=a-ino; //遍历过的中序序列元素

        root->lchild=creat(pre+1,ino,k); 

       root->rchild=creat(pre+1+k,a+1,len-k-1); 

 

    return root; 



int deep(tree *root) 



    if(!root) 

        return 0; 

    int m,n; 

    m=deep(root->lchild); 

    n=deep(root->rchild); 

    return m>n?m+1:n+1; 

}   

int main() 

{

     int len;

 char pre[51],ino[51];

 tree *root;

    while(scanf("%d",&len)!=EOF) 

    {          

         scanf("%s%s",pre,ino);  

        root=creat(pre,ino,len); 

        printf("%d\n",deep(root)); 

    } 

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: