• P1827 [USACO3.4]美国血统 American Heritage


    重建二叉树题

    存树

    // ABEDFCHG 
    // CBADEFGH 
    
    #include<iostream>
    using namespace std;
    
    const int N = 30;
    
    struct Node{
        char val;
        int l, r;
    }tr[N];
    
    int st[N];
    int cnt;
    
    string a, b;
    
    int dfs(int l1, int r1, int l2, int r2){
        if(l1 > r1) return 0;
        int u = ++ cnt;
        tr[u].val = b[l2];
        int idx = st[b[l2] - 'A'];
        tr[u].l = dfs(l1, idx - 1, l2 + 1, l2 + idx - l1);
        tr[u].r = dfs(idx + 1, r1, l2 + idx - l1 + 1, r2);
        return u;
    }
    
    void print(int u){
        if(tr[u].l) print(tr[u].l);
        if(tr[u].r) print(tr[u].r);
        cout << tr[u].val;
    }
    
    int main(){
        cin >> a >> b;
        
        for(int i = 0; i < a.size(); i ++) st[a[i] - 'A'] = i;
        
        print(dfs(0, a.size() - 1, 0, b.size() - 1));
    }
    

    不存树

    #include<iostream>
    using namespace std;
    
    const int N = 30;
    
    int st[N];
    
    string a, b;
    
    void dfs(int l1, int r1, int l2, int r2){
        if(l1 > r1) return;
        int idx = st[b[l2] - 'A'];
        dfs(l1, idx - 1, l2 + 1, l2 + idx - l1);
        dfs(idx + 1, r1, l2 + idx - l1 + 1, r2);
        cout << b[l2]; 
    }
    
    int main(){
        cin >> a >> b;
        
        for(int i = 0; i < a.size(); i ++) st[a[i] - 'A'] = i;
        
        dfs(0, a.size() - 1, 0, b.size() - 1);
        
        return 0;
    }
    
  • 相关阅读:
    C#练习3
    C#练习2
    C#环境变量配置及csc命令详解(转自cy88310)
    建站流程(转)
    C#练习
    程序竞赛1
    排序算法
    输出有向图的邻接矩阵
    C#高效分页代码(不用存储过程)
    存储过程详解
  • 原文地址:https://www.cnblogs.com/tomori/p/13858056.html
Copyright © 2020-2023  润新知