We can search the trie in O(n)
time with n
being the length of the word.
Finally, we can implement remove
.

To know whether we should remove something, we should first check if the word is in the trie. So first, we'll need to do a search for it and see if we get a depth
value returned.
1func (t *Trie) remove(val string) {
2 depth := t.search(val)
3 if depth != 0 {
4 t.removeHelper(t.head, val, depth)
5 }
6}
7
8func (t *Trie) remove(root *TrieNode, key string, depth int) *TrieNode {
9 pCrawl := root
10
11 if pCrawl == nil {
12 return nil
13 }
14
15 if depth == len(key) {
16 if pCrawl.isEndOfWord {
17 pCrawl.isEndOfWord = false
18 }
19 if empty(pCrawl) {
20 pCrawl = nil
21 }
22 return pCrawl
23 }
24 return nil
25}