Hi recently I encountered a subtle issue while trying to build a Trie function:
def search(self, word):
def dfs(node, word):
if not word:
if node.end:
self.res = True
return
if word[0]!='.':
node = node.next.get(word[0])
if not node:
return
dfs(node, word[1:])
else:
for n in node.next.values():
dfs(n, word[1:])
curr = self.root
self.res = False
dfs(curr, word)
return self.res
This works.
But this doesn't:
def search(self, word):
def dfs(node, word, res):
if not word:
if node.end:
res = True
return
if word[0]!='.':
node = node.next.get(word[0])
if not node:
return
dfs(node, word[1:], res)
else:
for n in node.next.values():
dfs(n, word[1:], res)
curr = self.root
res = False
dfs(curr, word, res)
return res
I don't get it why the latter approach, which passes a variable along the recursion instead of using a global variable, does not work.