docs: private void rotateLeft(Node<K, V> root) {
      Node<K, V> left = root.left;
      Node<K, V> pivot = root.right;
      Node<K, V> pivotLeft = pivot.left;
      Node<K, V> pivotRight = pivot.right;
  
      // move the pivot's left child to the root's right
      root.right = pivotLeft;
      if (pivotLeft != null) {
        pivotLeft.parent = root;
      }
  
      replaceInParent(root, pivot);
  
      // move the root to the pivot's left
      pivot.left = root;
      root.parent = pivot;
  
      // fix heights
      root.height = Math.max(left != null ? left.height : 0,
          pivotLeft != null ? pivotLeft.height : 0) + 1;
      pivot.height = Math.max(root.height,
          pivotRight != null ? pivotRight.height : 0) + 1;
    }