private Iterator<String> keys(Node<V> node, String prefix)
    {
        ArrayList<String> keys = new ArrayList<String>();
        if (node == null)
        {
            return keys.iterator();
        }
        Stack<Node<V>> nodes = new ArrayList<Node<V>>();
        Stack<String> prefixes = new ArrayList<String>();
        nodes.push(node);
        prefixes.push(prefix);
        while (!nodes.empty())
        {
            node = nodes.pop();
            prefix = prefixes.pop();
            if (node.greater != null)
            {
                nodes.push(node.greater);
                prefixes.push(prefix + node.letter);
            }
            if (node.equal != null)
            {
                nodes.push(node.equal);
                prefixes.push(prefix + node.letter);
            }
            if (node.less != null)
            {
                nodes.push(node.less);
                prefixes.push(prefix + node.letter);
            }
            if (node.value != null)
            {
                keys.add(prefix + node.letter);
            }
        }
        return keys.iterator();
    }