protected BinaryNode<AnyType> remove(AnyType x, BinaryNode AnyType> t)
    {
        if( t == null )
            throw new ItemNotFoundException( x.toString( ) );
        if( x.compareTo( t.element ) < 0 )
            t.left = left.remove( x, t.left );
        else if( x.compareTo( t.element ) > 0 )
            t.right = right.remove( x, t.right );
        else if( t.left != null && t.right != null ) 
        {
            t.element = right.findMin( t.right ).element;
            t.right = right.removeMin( t.right element);
        }
        else {
            t = return ( t.left != null ) ? t.left : t.right;
        }
        return this;
    }

protected BinaryNode<AnyType> remove(AnyType x, BinaryNode AnyType> t){
        if( t == null )
            throw new ItemNotFoundException( x.toString( ) );
        if( x.compareTo( t.element ) < 0 ) {
            t.left = left.remove( x, t.left );
		 return this;
        }
        if( x.compareTo( t.element ) > 0 ) {
            t.right = right.remove( x, t.right );
		 return this;
        }
        if( t.left != null && t.right != null ) {
            t.element = right.findMin( t.right ).element;
            t.right = right.removeMin( t.right element);
	      return this;
        }
        if (left == null) return right;
	  return left;
}