JSFiddle - React, Tailwind, and code Playground

HTML

<div>

</div>

JavaScript

function buildLayers(left, right, n, depth, layers){
    if(n == left || n == right ){return null}
    let t = {}
    t.n = n;
    if(!layers[depth]){
        layers[depth]=[];
    }
    layers[depth].push(t.n);
    t.left = buildLayers(left, n, Math.floor((left + n)/2), depth+1, layers)
    t.right = buildLayers(n, right, Math.floor((right + n)/2), depth+1, layers)
    return t;
}
function specialBuild(N){
    let layers = [];
    let t2 = buildLayers(1, N, Math.floor((1+N)/2),0, layers);
    //your special case
    layers.unshift([1,N]);
    return layers;
}
function getBack(i, layers){
    let depth = 0;
    let layer = layers[depth];
    while(i >= layers[depth].length){
        i -= layers[depth].length;
        depth++;
    }
    return layers[depth][i];
}
function log(...v){
document.querySelector('div').innerHTML += v.join(' ')+'<br/>';
}
function main(N){
    log('processing', N)
    let layers = specialBuild(N);
    for(let i = 0; i<N; ++i){
        log(i,'-->', getBack(i, layers))  
    }   
}
main(12);
main(16);