private boolean searchUpForPrevSubsetNode( Node node, K key, Object[] ret ) {

        if( node.mLeft != null && mComp.compareMins( node.mKey, key ) >= 0 &&
            mComp.compareMinToMax( key, node.mLeft.mMaxStop.mKey ) < 0 )
        {
            // Request downward searh on left subtree.
            ret[0] = node.mLeft;
            return false;
        }

        while( node.mParent != null ) {
            if( node == node.mParent.mLeft ) {
                node = node.mParent;

            } else {
                node = node.mParent;

                // If we're coming from the right subtree, it means we haven't
                // checked the
                // current node or left subtree.
                int c = mComp.compareMins( key, node.mKey );

                if( c <= 0 ) {
                    if( mComp.compareMaxes( key, node.mKey ) >= 0 ) {
                        ret[0] = node;
                        return true;
                    }

                    // Check if the left node might contain a subset.
                    if( node.mLeft != null && mComp.compareMinToMax( key, node.mLeft.mMaxStop.mKey ) < 0 ) {
                        ret[0] = node.mLeft;
                        return false;
                    }
                }
            }
        }

        // Search is complete.
        ret[0] = null;
        return true;
    }