private TriNode Search(TrieNode root, string s, int idx) { if(root == None) return None; if(idx == s.Count()) return root; if(s[idx] == '.'){ foreach (var child in root.Children()){ var ret = Search(child, s, idx+1); if(ret != None) return ret; } return None; } else{ return Search(root.next(CharToIndex(s[idx])), s, idx+1); } }
private int Size(TrieNode node) { if(node == None) return 0; var count = 0; if(node.isWord) count++; foreach(var child in node.Children()){ count += Size(child); } return count; }
private TrieNode delete(TrieNode node, string s, int idx) { if(node == None) return None; if(idx == s.Count()){ node.isWord = false; } else{ var i = CharToIndex(s[idx]); node.next(i) = delete(node.next(i), s, idx+1); } if(node.isWord) return node; foreach(var child in node.Children()){ if(child != None) return node; } return None; }