zoukankan      html  css  js  c++  java
  • 洛谷P1030c++递归求解先序排列

    P1030 求先序排列 - 洛谷 | 计算机科学教育新生态
    https://www.luogu.org/problem/P1030

    输入 #1
    BADC
    BDCA
    
    输出 #1

     ABCD

    题目如上,对于这道题,我们可以利用树的递归性质来求解

    已知后序序列和中序序列,我们可以逐次找根,输出根节点的值,再对左右子树分别来一波,就得到后序遍历的序列啦

    比如样例数据 中序序列BADC 后序序列BDCA

    后序序列的最后一个字符'A'就是这段序列里的根,接着在中序序列中找到'A'

    那么B就是遍历左子树的中序序列,DC就是遍历右子树的中序序列了

    由此我们也得到了左右子树的结点个数和各自的后序序列,就可以再对俩子树来一波,就可以了

    核心代码如下:

    void go(string a,string b)//a是后序遍历序列,b是中序遍历序列 
    {
        int lenl,lenr,len;
        len=a.length();
        for(int i=0;i<len;i++)
        if(a[len-1]==b[i])
        {   
        lenl=i;
        cout<<a[len-1];//输出根节点的值 
        lenr=len-1-lenl;
        if(lenl!=0)
        {
            string part1(a,0,lenl),part2(b,0,lenl);
            go(part1,part2);
        }
        if(lenr!=0)
        {
            string part1(a,lenl,lenr),part2(b,lenl+1,lenr);
            go(part1,part2);
        }
        }
    }

    string part(a,0,lenl)表示复制字符串a的a[0]到a[0+lenl-1]到part,也就是从0开始数lenl个

  • 相关阅读:
    【强烈推荐】 超漂亮的仿腾讯弹出层效果(兼容主流浏览器<转>;
    必须掌握的八个【cmd 命令行】
    grep命令的用法
    sed 命令的用法1
    Paste命令的用法
    uniq命令的用法
    join命令的用法
    Sort命令的用法
    cut命令的用法
    tr命令学习
  • 原文地址:https://www.cnblogs.com/Neptune0/p/11529030.html
Copyright © 2011-2022 走看看