private void collect(TreeNode root, String prefix, LinkedList<String> q){
		if(root == null)return;
		if(root.value != null)q.add(prefix);
		Iterator<Entry<Character, TreeNode>> childrenIterator = root.children.entrySet().iterator();
		while(childrenIterator.hasNext()){
			Entry<Character, TreeNode> e = childrenIterator.next();
			Character c = e.getKey();
			TreeNode child = e.getValue();
			collect(child, prefix + c, q);
		}
	}