def insert(self, word): node = self.root for c in word: if c not in node.children: node.children[c] = TrieNode() node = node.children[c] node.isEnd = True
def search(self, word): node = self.root for c in word: if c not in node.children: return False node = node.children[c] return node.isEnd # NOTE: not just True
def startsWith(self, prefix): node = self.root for c in prefix: if c not in node.children: return False node = node.children[c] return True # path exists ⇒ prefix exists
def autocomplete(self, prefix): node = self.root for c in prefix: if c not in node.children: return [] node = node.children[c] res = [] def dfs(n, path): if n.isEnd: res.append(prefix + path) for c, child in n.children.items(): dfs(child, path + c) dfs(node, "") return res
Doosre uses: IP routing (longest-prefix match), T9 / phone keypads, word games (Boggle solver dead prefixes jaldi prune karta hai), DNA substring search.
Ek giant treasure map socho jo tree jaisi shaped hai. Koi word spell karne ke liye tum letters ke saath chalte ho: trunk se shuru karo, branch c par kadam rakho, phir a, phir r — ab tumne "car" spell kar liya. Agar kisi ne exactly wahan treasure (ek chota ✅ flag) gada hai jahan tum khade ho, toh "car" ek real word hai! Jo words same se shuru hote hain woh split hone se pehle same branches par chalte hain, toh map mein c-a-r kabhi repeat nahi hota. "ca" se shuru hone wale saare words chahiye? Bas ca tak chalo aur apne upar har branch explore karo — yahi autocomplete hai!
Child characters → child nodes ka ek map, plus ek isEnd boolean jo mark karta hai ki koi word wahan khatam hoti hai ya nahi.
Trie mein "leaf = word" kyun kaam nahi karta?
car jaisi word internal ho sakti hai (uska child d hai card ke liye) phir bhi ek valid word hai, isliye humein ek explicit isEnd flag chahiye.
search aur startsWith mein code ka SIRF kya fark hai?
searchreturn node.isEnd se khatam hota hai; startsWithreturn True se khatam hota hai (path existence kaafi hai).
insert/search/startsWith ki time complexity?
O(L) jahan L word ki length hai — stored words ki sankhya N se independent.
Trie ka root node kya represent karta hai?
Empty string "".
Autocomplete trie ko kaise use karta hai?
Prefix node tak walk karo, phir subtree ka DFS karo aur isEnd=True wale saare nodes collect karo, prefix prepend karte hue.
Sirf "car" containing trie par search("ca") kya return karta hai?
False — path exist karta hai lekin koi word a par khatam nahi hoti (a.isEnd False hai).
Usi trie par startsWith("ca") kya return karta hai?
True — path c→a exist karta hai.
Prefix queries ke liye trie hash set se better kyun hai?
Hash set mein koi shared-prefix structure nahi hoti; trie saare words ko common prefix ke hisaab se group karta hai isliye prefix queries sirf relevant subtree explore karti hain.
Trie se koi word safely kaise delete karte hain?
Uske end node ka isEnd unset karo; nodes ko upar se sirf tab prune karo jab unka koi child nahi aur woh kisi aur word ka end nahi hain.