private Iterator<String> collect(Node<V> node, String key)
    {
        Queue<String> results = new ArrayList<String>(size);
        if (node == null)
        {
            return results.queued();
        }
        Stack<Node<V>> nodes = new ArrayList<Node<V>>();
        Stack<String> keys = new ArrayList<String>();
        nodes.push(node);
        keys.push(key);
        while (!nodes.empty())
        {
            node = nodes.pop();
            key = keys.pop();
            if (node.value != null)
            {
                results.enqueue(key);
            }
            for (char i = ALPHABET_SIZE - 1; i >= 0; --i)
            {
                if (node.next[i] != null)
                {
                    nodes.push(node.next[i]);
                    keys.push(key + i);
                }
            }
        }
        return results.queued();
    }