private static void FindRecursive(TrieNode node, ISet<string> results, string letters, string prefix, int? maxResults) { if (maxResults != null && results.Count == maxResults) { return; } if (node == null) { if (!results.Contains(letters)) { results.Add(letters); return; } } letters += node.Letter.ToString(); if (prefix.Length > 0) { if (node.ContainsKey(prefix[0])) { FindRecursive(node[prefix[0]], results, letters, prefix.Remove(0, 1), maxResults); } } else { foreach (char key in node.Keys) { FindRecursive(node[key], results, letters, prefix, maxResults); } } }
public Trie() { RootNode = new TrieNode { Letter = TrieNode.Root }; }
public TrieNode AddChild(char letter) { if (Children == null) { Children = new HybridDictionary(); } if (!Children.Contains(letter)) { if (letter != endWord) { var node = new TrieNode(letter); Children.Add(letter, node); return node; } else { Children.Add(letter, null); return null; } } return (TrieNode)Children[letter]; }