1 条题解

  • 0
    @ 2025-10-8 16:59:53

    未经整理的题解:

    #include <bits/stdc++.h>
    using namespace std;
    char a[35], b[35];
    void dfs(int aL, int aR, int bL, int bR)
    {
        if (aL > aR) return;
        int p = 0;
        for (int j = bL; j <= bR; j++)
        {
            for (int i = aL; i <= aR; i++) if (b[j] == a[i]) { p = i; break; }
            if (p) break;
        }
        printf("%c", a[p]);
        dfs(aL, p - 1, bL, bR);
        dfs(p + 1, aR, bL, bR);
        
    }
    int main()
    {
        scanf("%s%s", a + 1, b + 1);
        int len = strlen(a + 1);
        dfs(1, len, 1, len);
        return 0;
    }
    

    优化后的代码:

    #include <bits/stdc++.h>
    using namespace std;
    char a[35], b[35], ys[150];
    void dfs(int aL, int aR, int bL, int bR)
    {
        if (aL > aR) return;
        int p = 0; for (int j = bL; j <= bR; j++) if (ys[b[j]] >= aL && ys[b[j]] <= aR) { p = ys[b[j]]; break; }
        printf("%c", a[p]);
        dfs(aL, p - 1, bL, bR);
        dfs(p + 1, aR, bL, bR);
        
    }
    int main()
    {
        scanf("%s%s", a + 1, b + 1);
        int len = strlen(a + 1);
        for (int i = 1; i <= len; i++) ys[a[i]] = i;
        dfs(1, len, 1, len);
        return 0;
    }
    
    • 1

    *【递归】已知中序和层序求先序

    信息

    ID
    2033
    时间
    1000ms
    内存
    64MiB
    难度
    6
    标签
    递交数
    218
    已通过
    59
    上传者