private void gatherResultsByHeuristic(String word, List <Character> queue, List <String> results, int maxResults) {
	   List <Character> locQ = new LinkedList <Character> (queue);
	   if (word.length() == 1 && !this.isRoot()){
		   if(!this.isLeaf()) {
			   Map <Integer, Integer> heuristicMap = new HashMap <Integer, Integer> ();
			   this.addChildrenToHeuristicMap(heuristicMap);
			   while (this.hasMaxChildHeuristic(heuristicMap)) {
				   this.findByHeuristic(queue, results, heuristicMap);
				   if (maxResults > 0 && results.size() == maxResults) {
					   return;
				   }
			   }
		   }
	   } else {
		   if(this.isRoot()){
			   Character key = Character.valueOf(word.charAt(0));
			   MTrieNode node = (MTrieNode) this.children.get(key);
			   if (node != null) {
				   node.gatherResultsByHeuristic(word, locQ, results, maxResults);
			   }
		   } else {
			   locQ.add(this.value);
			   Character key = Character.valueOf(word.charAt(1));
			   String value = String.valueOf(word.substring(1).toCharArray());
			   MTrieNode node = (MTrieNode) this.children.get(key);
			   if (node != null) {
				   node.gatherResultsByHeuristic(value, locQ, results, maxResults);
			   }
		   }
	   }
   }