1function insert(node, val) {
2 if (!node) return new Node(val);
3 if (val < node.val) node.left = insert(node.left, val);
4 else node.right = insert(node.right, val);
5 node.height = 1 + Math.max(height(node.left), height(node.right));
6 const bf = height(node.left) - height(node.right);
7 if (bf > 1 && val < node.left.val) return rotateRight(node); // LL
8 if (bf < -1 && val > node.right.val) return rotateLeft(node); // RR
9 if (bf > 1 && val > node.left.val) { node.left = rotateLeft(node.left); return rotateRight(node); } // LR
10 if (bf < -1 && val < node.right.val) { node.right = rotateRight(node.right); return rotateLeft(node); } // RL
11 return node;
12}