还原二叉树(25 分)(已知前序和中序)

还原二叉树(25 分)

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

输入格式:

输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

输出格式:

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

输入样例:

9
ABDFGHIEC
FDHGIBEAC

输出样例:

5
#include<iostream>
#include<algorithm>
using namespace std;
struct Tree
{  
    char data;  
    struct Tree *left,*right;  
};
char a[105];
char b[105];
struct Tree*creat(int q,int z, int n)
{  
    struct Tree *T;  
    int i;  
    if(n<=0)
    {  
        T=NULL;  
    }
    else
    {  
        T=(struct Tree*)malloc(sizeof(struct Tree)); //首先要分配空间  才能在T中村播放数据   
        T->data=a[q];  
        for(i=0;a[q]!=b[z+i];i++);  
        T->left=creat(q+1,z,i);  
        T->right=creat(q+i+1,z+i+1,n-i-1);  
    }  
    return T;  
  
}  

int getHeight(Tree*T)
{
    int hl,hr;
    if(T)
    {
        hl=getHeight(T->left);  
        hr=getHeight(T->right);
        return max(hl,hr)+1;
    }
    else return 0;
}
int main()
{
    struct Tree *T;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n;i++)
    {
        cin>>b[i];
    }
    T=creat(0,0,n);
    int p=getHeight(T);
    cout<<p<<endl;
    return 0;
}

 

 
posted on 2018-06-07 12:07  蔡军帅  阅读(706)  评论(0编辑  收藏  举报