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

来源:互联网 发布:厦门淘宝客服工资 编辑:程序博客网 时间:2024/06/05 00:36

Problem Description

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

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

Output

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

9
ABDFGHIEC
FDHGIBEAC
Example Output

5

#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;typedef char telemtype;typedef struct Binode{    telemtype data;    struct Binode *lchild,*rchild;} Binode,*Bitree;Bitree creat(Bitree &T,telemtype a[],telemtype b[],int n){    if(n==0)    {        return NULL;    }    else    {        int i;        for(i=0; i<n; i++)        {            if(a[0]==b[i])                break;        }        T=new Binode;        T->data=a[0];        T->lchild=creat(T->lchild,a+1,b,i);//这里出错,之前没加T->lchild,所以不对。因为此函数返回值类型是Bitree,所以这里必须承接着它。如果类型是void,则不用        T->rchild=creat(T->rchild,a+i+1,b+i+1,n-i-1);    }    return T;}或者这个函数可以这样写:void creat(Bitree &T,telemtype a[],telemtype b[],int n){    if(n==0)    {       T=NULL;    }    else    {        int i;        for(i=0; i<n; i++)        {            if(a[0]==b[i])                break;        }        T=new Binode;        T->data=a[0];        creat(T->lchild,a+1,b,i);        creat(T->rchild,a+i+1,b+i+1,n-i-1);    }}//如果这样写主函数内直接creat(T,a,b,n)。int depth(Bitree T)//高度即为深度{    int m,n,d;    if(!T)        d=0;    else if(!T->lchild&&!T->rchild)        d=1;    else    {        m=depth(T->lchild);        n=depth(T->rchild);        d=1+(m>n?m:n);    }    return d;}int main(){    int n;    telemtype a[55],b[55];    while(cin>>n)    {        cin>>a>>b;        Bitree T;        T=creat(T,a,b,n);        n=depth(T);        cout<<n<<endl;    }    return 0;}
阅读全文
0 0
原创粉丝点击