sonic-forest
Version:
High-performance (binary) tree and sorted map implementation (AVL, Splay, Radix, Red-Black)
80 lines (79 loc) • 1.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.swap = void 0;
const swap = (root, x, y) => {
const xp = x.p;
const xl = x.l;
const xr = x.r;
const yp = y.p;
const yl = y.l;
const yr = y.r;
if (yl === x) {
x.l = y;
y.p = x;
}
else {
x.l = yl;
if (yl)
yl.p = x;
}
if (yr === x) {
x.r = y;
y.p = x;
}
else {
x.r = yr;
if (yr)
yr.p = x;
}
if (xl === y) {
y.l = x;
x.p = y;
}
else {
y.l = xl;
if (xl)
xl.p = y;
}
if (xr === y) {
y.r = x;
x.p = y;
}
else {
y.r = xr;
if (xr)
xr.p = y;
}
if (!xp) {
root = y;
y.p = undefined;
}
else if (xp !== y) {
y.p = xp;
if (xp) {
if (xp.l === x) {
xp.l = y;
}
else {
xp.r = y;
}
}
}
if (!yp) {
root = x;
x.p = undefined;
}
else if (yp !== x) {
x.p = yp;
if (yp) {
if (yp.l === y) {
yp.l = x;
}
else {
yp.r = x;
}
}
}
return root;
};
exports.swap = swap;