第一题

const int N = 100;
int L[N],R[N],T[N];
 
void generateT(){
    for(int i=1;i<=N;i++){
        T[L[i]]=T[R[i]]=i;
    }
}
 
bool check(int i,int j){
    return T[i]==j or T[j]==i;
}

第三题

void putN(int n) {
    K[N-1]=n;
    swap(K[1], K[N-1]);
    int ind = 2;
    while (ind <= N) {
        if (K[(ind - 2) / 2+1] < K[ind]) {
            swap(K[(ind - 2) / 2+1], K[ind]);
            ind = (ind - 1) * 2 + 2;
            continue;
        }
        if (++ind > N)
            break;
        if (K[(ind - 2) / 2] < K[ind]) {
            swap(K[(ind - 2) / 2], K[ind]);
            ind = (ind - 1) * 2 + 2;
            continue;
        }
        break;
    }
}

得到编码:

A 0100
B 0101
C 011
D 10
E 11
F 00