Пример #1
0
 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);
     }
 }
Пример #2
0
 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;
 }
Пример #3
0
    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;
    }