public void Insert(String word) { if (word == null) { return; } Int32 length = word.Length; if (length == 0) { return; } TrieNode node = this._root; for (Int32 index = 0; index < length; ++index) { Char currentLetter = word[index]; if (!node.ContainsLetter(currentLetter)) { node[currentLetter] = new TrieNode(); } node = node[currentLetter]; } node.WordEndingNode = true; }
private TrieNode _searchPrefix(String word) { if (word == null) { return(null); } Int32 length = word.Length; if (length == 0) { return(null); } TrieNode node = this._root; for (Int32 index = 0; index < length; ++index) { Char currentLetter = word[index]; if (!node.ContainsLetter(currentLetter)) { return(null); } node = node[currentLetter]; } return(node); }
private IEnumerable <String> _getValuesRecursively(TrieNode node) { if (node == null) { yield break; } for (Int32 index = 0; index < 26; ++index) { Char letter = (Char)('a' + index); if (!node.ContainsLetter(letter)) { continue; } String child = "\"" + letter; if (node[letter].WordEndingNode) { child += "."; } child += "\""; yield return(child); foreach (String grandchild in this._getValuesRecursively(node[letter])) { yield return(grandchild); } } yield return("null"); }