2 条题解

  • 0
    @ 2023-6-6 14:08:24
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    char mid[100];
    char fir[100];
    int i,j;
    void dian(int fl,int fr,int ml,int mr)//前序遍历的左右边界,中序遍历的左右边界
    {
        int gen,llen,rlen;
        for(i=0;strlen(mid);i++)
          if(mid[i]==fir[fl])//找到根节点在中序遍历中的位置
          break;
          gen=i;
        llen=gen-ml;//记录左子树中节点的数量
        rlen=mr-gen;//记录右子树中节点的数量
        if(llen>0)
        {
            dian(fl+1,fl+llen,ml,ml+llen-1);//递归前序和中序的左子树
        }
        if(rlen>0)
        {
            dian(fr-rlen+1,fr,gen+1,gen+rlen);//递归前序和中序的右子树
        }
        cout<<fir[fl];//输出根节点
    }
    int main()
    {
        cin>>mid>>fir;
        dian(0,strlen(fir)-1,0,strlen(mid)-1);
        return 0;
    }
    

    信息

    ID
    1391
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    3
    上传者