private static void SearchHelper(TrieNode currNode, List <string> currList, string chars, string prefix, int numberOfResults) { if (currList.Count == numberOfResults) { return; } if (currNode == null) { if (!currList.Contains(chars)) { currList.Add(chars); } return; } chars += currNode.value; if (prefix.Length > 0) { if (currNode.ContainsKey(prefix[0])) { SearchHelper(currNode[prefix[0]], currList, chars, prefix.Remove(0, 1), numberOfResults); } } else { foreach (char key in currNode.Keys) { SearchHelper(currNode[key], currList, chars, prefix, numberOfResults); } } }
/// <summary> /// Recursive method to find children of prefix in Trie. /// </summary> /// <param name="results">Found words.</param> /// <param name="maxMatches">Maximum number of matches to be returned</param> /// <param name="prefix">User entered prefix</param> /// <param name="root">Current TrieNode</param> /// <param name="letters">String to be converted to returned value</param> private static void findMatches(HashSet <string> results, int maxMatches, string prefix, TrieNode root, string letters) { if (results.Count() == maxMatches) { return; } if (root.Letter == TrieNode.eow) { if (!results.Contains(letters)) { results.Add(letters); } return; } letters += root.Letter.ToString(); if (prefix.Length > 0) { if (root.ContainsKey(prefix[0])) { char key = prefix[0]; findMatches(results, maxMatches, prefix.Remove(0, 1), root[key], letters); } } else { foreach (char key in root.Keys()) { findMatches(results, maxMatches, prefix, root[key], letters); } } }