code: 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;
  	}
docs: 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.