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

来源:互联网 发布:租书软件 编辑:程序博客网 时间:2024/06/11 20:19

Problem Description

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

Input

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

 

Output

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

Example Input

9 ABDFGHIECFDHGIBEAC

Example Output

5
#include<stdio.h>#include<string.h>#include<stdlib.h>#define ERROR -1#define OK 1typedef char TElemtype;typedef int Statu;typedef struct BiTnode{    TElemtype data;    struct BiTnode *lchild, *rchild;}BiTnode, *BiTree;int Prin(BiTree T);    //求深度BiTree CreateBiTree(TElemtype pre[], TElemtype inorder[], int len);  //建树int main(){    char inorder[55], pre[55];    int n;    while(~scanf("%d", &n))    {        scanf("%s%s", pre, inorder);        BiTree T;        T = CreateBiTree(pre, inorder, n);        n = Prin(T);        printf("%d\n", n);    }    return 0;}int Prin(BiTree T){    int d, l, r;    if(!T)      //节点为空时此节点深度为0        d = 0;    else    {        l = Prin(T -> lchild);        r = Prin(T -> rchild);        d = 1 + (l > r ? l : r); //根节点的深度为左子树 右子树较大的深度加一    }    return d;}BiTree CreateBiTree(TElemtype pre[], TElemtype inorder[], int len){    int i;    if(!len)    {        return NULL;    }    BiTree T;    for(i = 0; i < len; i++)    {        if(pre[0] == inorder[i])            break;    }    T = (BiTree)malloc(sizeof(BiTnode));    T -> data = pre[0];    T -> lchild = CreateBiTree(pre + 1, inorder, i);    T -> rchild = CreateBiTree(pre + 1 + i, inorder + 1 + i, len - i - 1);    return T;}


阅读全文
0 0
原创粉丝点击