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

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

Description

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

Input

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

Output

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

Sample

Input 

9 
ABDFGHIEC
FDHGIBEAC

Output 

5
#include<iostream>
#include<cstring>
using namespace std;
struct Tnode
{
    char d;
    Tnode *l,*r;
};
Tnode *CreatTree(char pre[],char in[],int len)
{
    if(len<=0)
        return NULL;
    int i;
    for( i=0;i<len;i++)
        if(*pre==in[i])
        break;
    Tnode *p=new Tnode;
    p->d=*pre;
    p->l=CreatTree(pre+1,in,i);
    p->r=CreatTree(pre+i+1,in+i+1,len-i-1);
    return p;
}
int DeepT(Tnode *p)
{
    if(!p)
        return 0;
    else
        {
            int l=DeepT(p->l)+1;
            int r=DeepT(p->r)+1;
            return l>r?l:r;
        }
}
int main()
{
    int n;
    while(cin>>n)
    {
        char st1[60],st2[60];
        cin>>st1>>st2;
        Tnode *root;
        root=CreatTree(st1,st2,n);
        cout<<DeepT(root)<<endl;
    }
    return 0;
}
#include <iostream>
#include <cstdio>

using namespace std;

struct Tree
{
    char c;
    Tree *lt,*rt;
};

Tree *creat(char *&xx,char *zx)
{
    if(*zx=='')
        return NULL;
    char *x,*y;
    Tree *r=new Tree;
    int i=0;
    while(zx[i]!='')
    {
        if(*xx==zx[i])
        {
            r->c=zx[i];
            zx[i]='';
            x=zx;
            y=zx+i+1;
            xx++;
            r->lt=creat(xx,x);
            r->rt=creat(xx,y);
            break;
        }
        i++;
    }
    return r;
}

int dev(Tree *r)
{
    if(r==NULL)
        return 0;
    int l=dev(r->lt),rr=dev(r->rt);
    int m=l>rr?l:rr;
    return m+1;
}

int main()
{
    char xx[55],zx[55],*p;
    Tree *root;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%s%s",xx,zx);
        p=xx;
        root=creat(p,zx);
        printf("%d
",dev(root));
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12717794.html