# Trie https://leetcode.com/problems/implement-trie-prefix-tree/ ## Implementation ### Basic ```python class TrieNode: def __init__(self): self.children = {} self.is_end_of_word = False class Trie: def __init__(self): self.root = TrieNode() def insert(self, word: str) -> None: node = self.root for char in word: if char not in node.children: node.children[char] = TrieNode() node = node.children[char] node.is_end_of_word = True def search(self, word: str) -> bool: node = self.root for char in word: if char not in node.children: return False node = node.children[char] return node.is_end_of_word def startsWith(self, prefix: str) -> bool: node = self.root for char in prefix: if char not in node.children: return False node = node.children[char] return True ``` ## Optimized ```python class Trie(dict): def insert(self, word: str) -> None: reduce(lambda node, c: node.setdefault(c, {}), word, self)['] = True def search(self, word: str) -> bool: return self.startsWith(word + ') def startsWith(self, prefix: str) -> bool: node = self return all(node := node.get(char) for char in prefix) ```