private TreeNode<T> leftRotate(){
		TreeNode<T> head = right;
		right = head.left;
		head.left = this;
		height = Math.max(height(right), height(left)) + 1;
		head.left = head.assimilateOverlappingIntervals(this);
		return head;
	}
private TreeNode < T > leftRotate ( ) { TreeNode < T > head = right ; right = head . left ; head . left = this ; height = Math . max ( height ( right ) , height ( left ) ) + 1 ; head . left = head . assimilateOverlappingIntervals ( this ) ; return head ; }
Performs a left rotation of the current node, by promoting its right child
and demoting the current node. After the left rotation, the promoted node
{@link #assimilateOverlappingIntervals(TreeNode) assimilates} the intervals in
the demoted node, which intersect its middlepoint.

@return The new root of the subtree rooted at the current node, after the
rotation has been performed.