zoukankan      html  css  js  c++  java
  • 数据结构实验之二叉树四:(先序中序)还原二叉树

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

    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;
    }
  • 相关阅读:
    IIS配置
    sql表值函数中实现类似split功能
    毕至居预约系统设计图第十二组
    毕至居预约系统研发需求分析——第十二组
    MASA Blazor多页签组件
    关于Linux Oracle下的表空间文件删除不干净的处理方法
    命令行下对apk签名
    android自定义绘制TableLayout,类似.net中DataGrid控件
    使用Arcgis tools fix后Android不能生成Apk包异常解决方法
    SyncML一种平台无关的信息同步标准协议
  • 原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12717794.html
Copyright © 2011-2022 走看看