private void AddWord(WordTrieNode node, char[] charArray, int startIndex) { if (node == null || charArray == null || charArray.Length == 0 || startIndex < 0 || startIndex > charArray.Length) { return; } if (startIndex == charArray.Length) { node.Children[WordTrieNode.TerminatingChar] = new WordTrieNode(WordTrieNode.TerminatingChar); } else { char ch = charArray[startIndex]; if (!node.Children.ContainsKey(ch)) { node.Children[ch] = new WordTrieNode(ch); } AddWord(node.Children[ch], charArray, startIndex + 1); } }
private bool Search(WordTrieNode node, char[] charArray, int startIndex) { if (node == null || charArray == null || charArray.Length == 0 || startIndex < 0 || startIndex > charArray.Length) { return(false); } if (startIndex == charArray.Length) { return(node.Children.ContainsKey(WordTrieNode.TerminatingChar)); } else { char ch = charArray[startIndex]; if (ch == WildCardChar) { foreach (char childChar in node.Children.Keys) { if (childChar != WordTrieNode.TerminatingChar) { WordTrieNode childNode = node.Children[childChar]; if (Search(childNode, charArray, startIndex + 1)) { return(true); } } } return(false); } else { if (node.Children.ContainsKey(ch)) { return(Search(node.Children[ch], charArray, startIndex + 1)); } else { return(false); } } } }
/** Initialize your data structure here. */ public WordDictionary() { Root = new WordTrieNode(WordTrieNode.RootChar); }