Home Manual Reference Source

src/rotate/rotate_left.js

import assert from 'assert';
import Node from '../types/Node.js';

/**
 * Rotate tree left. (see https://en.wikipedia.org/wiki/Tree_rotation)
 *
 *         p                p
 *         |                |
 *         A                B
 *        / \              / \
 *       x   B     ->     A   y
 *          / \          / \
 *         b   y        x   b
 *
 *
 * @param {Node} A - The root of the tree.
 *
 */

const rotate_left = (A) => {
	assert(A instanceof Node);
	const B = A.right;
	assert(B instanceof Node);

	const p = A.parent;
	if (p !== null) {
		if (A === p.left) p.left = B;
		else p.right = B;
	}

	B.parent = p;
	A.parent = B;

	const b = B.left;
	A.right = b;
	B.left = A;

	if (b !== null) b.parent = A;
};

export default rotate_left;