code: public boolean remove(Interval<T> interval){
  		if (interval.isEmpty() || root == null)
  			return false;
  		int sizeBeforeOperation = size;
  		root = TreeNode.removeInterval(this, root, interval);
  		return size == sizeBeforeOperation;
  	}
docs: Removes an interval from the tree, if it was stored in it. This operation may cause the
  {@link TreeNode#deleteNode(TreeNode) deletion of a node}, which in turn may cause
  rebalancing of the tree and the {@link TreeNode#assimilateOverlappingIntervals(TreeNode) assimilation}
  of intervals from one node to another. This is why this operation may run in {@code O(n)}
  worst-case time, even though on average it should run in {@code O(logn)} due to the
  nature binary trees.
  
  @param interval
  @return