class RedBlackTree {

    public RedBlackNode<K,V> lowerBound(K key) {
        RedBlackNode<K,V> bestNode = null;

        RedBlackNode<K,V> node = root;
        while (node != null) {
        	int result = comparator.compare(key, node.key);
            if (result <= 0) {
            	bestNode = node;
                node = node.left;
            }
            else {
                node = node.right;
            }

        }
        return bestNode;
    }

    public  RedBlackTree(Comparator<K> comparator, boolean allowDuplicateKeys);
    public  RedBlackTree(RedBlackTree<K, V> tree);

}