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");
            }