class Trie(object): ... def all_prefixes(self): results = set() if self.flag: results.add(self.value) if not self.children: return results return reduce(lambda a, b: a | b, [node.all_prefixes() for node in self.children.values()]) | results def autocomplete(self, prefix): node = self for char in prefix: if char not in node.children: return set() node = node.children[char] return node.all_prefixes()