예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        /// <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);
                }
            }
        }