private Node<K,V> ceiling( V value ) {
        if( value == null ) {
            return null;
        }
        
        Node<K,V> node = mRoot;
        Node<K,V> ret = null;
        
        if( mValueComparator != null ) {
            Comparator<? super V> comp = mValueComparator;
            while( node != null ) {
                int c = comp.compare(value, node.mValue);
            
                if(c <= 0) {
                    ret = node;
                    node = node.mAllLeft;
                }else{
                    node = node.mAllRight;
                }
            }
        } else {
            Comparable<? super V> comp = (Comparable<? super V>)value;
            while( node != null ) {
                int c = comp.compareTo( node.mValue );
                if( c <= 0 ) {
                    ret = node;
                    node = node.mAllLeft;
                } else {
                    node = node.mAllRight;
                }
            }
        }
        
        return ret;
    }