A Trie is a tree-like data structure that stores a dynamic set of strings, where each node represents a character. It is used to efficiently search for words with common prefixes.
Click to reveal answer
beginner
How does a Trie help in implementing an autocomplete system?
A Trie allows quick lookup of all words that start with a given prefix by traversing nodes corresponding to the prefix characters, then collecting all descendant words.
Click to reveal answer
intermediate
What is the time complexity to insert a word of length n into a Trie?
The time complexity is O(n), where n is the length of the word, because each character is inserted one by one along the path in the Trie.
Click to reveal answer
intermediate
Explain how to search for all words with a given prefix in a Trie.
First, traverse the Trie nodes matching the prefix characters. Then, perform a depth-first search from that node to collect all complete words that start with the prefix.
Click to reveal answer
intermediate
What is the main advantage of using a Trie over a hash map for autocomplete?
Trie stores words in a prefix-sharing way, which saves space and allows efficient prefix searches, while hash maps do not support prefix queries efficiently.
Click to reveal answer
What does each node in a Trie represent?
AA character
BA whole word
CA number
DA sentence
✗ Incorrect
Each node in a Trie represents a single character of a word.
What is the first step to find autocomplete suggestions for a prefix in a Trie?
ASort all words alphabetically
BInsert the prefix into the Trie
CDelete all words not matching the prefix
DTraverse nodes matching the prefix
✗ Incorrect
You first traverse the Trie nodes that match the prefix characters.
What is the time complexity to search for a prefix of length n in a Trie?
AO(1)
BO(n^2)
CO(n)
DO(log n)
✗ Incorrect
Searching for a prefix takes O(n) time, where n is the prefix length.
Which of these is NOT a benefit of using a Trie for autocomplete?
ASaves space by sharing prefixes
BAutomatically sorts words by frequency
CSupports fast exact word search
DEfficient prefix search
✗ Incorrect
Tries do not automatically sort words by frequency.
What data structure is commonly used to store children nodes in a Trie?
AArray or Map
BStack
CQueue
DLinked List
✗ Incorrect
Children nodes are stored in arrays or maps keyed by characters.
Describe how to build an autocomplete system using a Trie.
Think about storing words and searching prefixes.
You got /3 concepts.
Explain why Tries are preferred over hash maps for prefix-based searches.
Consider how data is organized and searched.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of using a Trie in an autocomplete system?
easy
A. To efficiently store and search prefixes of words
B. To sort words alphabetically
C. To count the frequency of words
D. To encrypt the stored words
Solution
Step 1: Understand the role of Trie in prefix search
A Trie is a tree-like data structure designed to store strings by their prefixes, allowing fast prefix-based searches.
Step 2: Connect Trie usage to autocomplete
Autocomplete requires quick lookup of words starting with a given prefix, which Trie supports efficiently.
Final Answer:
To efficiently store and search prefixes of words -> Option A
Quick Check:
Trie = prefix search [OK]
Hint: Trie is built for prefix-based fast search [OK]
Common Mistakes:
Confusing Trie with sorting algorithms
Thinking Trie encrypts data
Assuming Trie counts word frequency only
2. Which of the following is the correct TypeScript syntax to define a Trie node with children as a Map of characters to Trie nodes?
easy
A. class TrieNode { children: Array<string> = []; isEnd: boolean = false; }
B. class TrieNode { children: Map = new Map(); isEnd: boolean = false; }
C. class TrieNode { children: string[] = []; isEnd: boolean = true; }
D. class TrieNode { children: Map = new Map(); isEnd: boolean = false; }
Solution
Step 1: Identify correct data type for children
Children should map characters (string) to TrieNode objects, so Map is correct.
Step 2: Check initialization and isEnd flag
Children initialized as new Map(), and isEnd defaults to false indicating not end of word initially.
Final Answer:
class TrieNode { children: Map = new Map(); isEnd: boolean = false; } -> Option B
Quick Check:
Map for children [OK]
Hint: Children map chars to nodes using Map [OK]
Common Mistakes:
Using array instead of Map for children
Using number keys instead of string keys
Setting isEnd to true by default
3. Given the following TypeScript code snippet for inserting words into a Trie and searching for prefix suggestions, what will be the output of autocomplete.getSuggestions('ca')?
class TrieNode {
children: Map = new Map();
isEnd: boolean = false;
}
class AutocompleteSystem {
root: TrieNode = new TrieNode();
insert(word: string) {
let node = this.root;
for (const char of word) {
if (!node.children.has(char)) {
node.children.set(char, new TrieNode());
}
node = node.children.get(char)!;
}
node.isEnd = true;
}
getSuggestions(prefix: string): string[] {
let node = this.root;
for (const char of prefix) {
if (!node.children.has(char)) return [];
node = node.children.get(char)!;
}
const results: string[] = [];
const dfs = (currNode: TrieNode, path: string) => {
if (currNode.isEnd) results.push(path);
for (const [ch, nextNode] of currNode.children) {
dfs(nextNode, path + ch);
}
};
dfs(node, prefix);
return results;
}
}
const autocomplete = new AutocompleteSystem();
autocomplete.insert('cat');
autocomplete.insert('car');
autocomplete.insert('cap');
autocomplete.insert('dog');
console.log(autocomplete.getSuggestions('ca'));
medium
A. ["cat", "car"]
B. ["dog"]
C. []
D. ["cat", "car", "cap"]
Solution
Step 1: Insert words and traverse prefix 'ca'
Words 'cat', 'car', 'cap' are inserted. Searching prefix 'ca' finds node with children 't', 'r', 'p'.
Step 2: DFS collects all words starting with 'ca'
DFS from 'ca' node collects 'cat', 'car', and 'cap' as all end nodes under that prefix.
Final Answer:
["cat", "car", "cap"] -> Option D
Quick Check:
Prefix 'ca' matches cat, car, cap [OK]
Hint: DFS from prefix node collects all words [OK]
Common Mistakes:
Returning empty list if prefix found
Returning unrelated words like 'dog'
Missing one or more words starting with prefix
4. The following TypeScript code for the insert method in a Trie has a bug. What is the bug?
insert(word: string) {
let node = this.root;
for (const char of word) {
if (!node.children.has(char)) {
node.children.set(char, new TrieNode());
}
node = node.children.get(char);
}
node.isEnd = true;
}
medium
A. Missing non-null assertion operator (!) when getting child node
B. Children map should be an array, not Map
C. isEnd should be set to false, not true
D. Loop should iterate over indices, not characters
Solution
Step 1: Identify potential null or undefined access
node.children.get(char) can return undefined if key missing, so TypeScript requires non-null assertion or check.
Step 2: Fix by adding non-null assertion operator
Adding '!' after get(char) tells TypeScript the value is not undefined, fixing the bug.
Final Answer:
Missing non-null assertion operator (!) when getting child node -> Option A
Quick Check:
Use get(char)! to avoid undefined [OK]
Hint: Use '!' after get() to assure non-null [OK]
Common Mistakes:
Ignoring TypeScript undefined error
Changing data structure unnecessarily
Setting isEnd incorrectly
5. You want to extend the autocomplete system to return suggestions sorted by their frequency of insertion (most frequent first). Which data structure modification is best to support this efficiently?
hard
A. Store all words in a separate array and sort on each query
B. Use a binary search tree instead of a Trie
C. Add a frequency count field to each Trie node marking end of word
D. Remove the isEnd flag and rely on children count
Solution
Step 1: Understand frequency tracking in Trie
Adding a frequency count to nodes marking word ends allows tracking how often each word was inserted.
Step 2: Use frequency to sort suggestions efficiently
During DFS for suggestions, use frequency counts to sort or prioritize words without extra data structures.
Final Answer:
Add a frequency count field to each Trie node marking end of word -> Option C
Quick Check:
Frequency field in Trie nodes enables sorting [OK]
Hint: Track frequency in nodes to sort suggestions fast [OK]
Common Mistakes:
Sorting all words on each query (slow)
Replacing Trie with BST loses prefix efficiency
Removing isEnd loses word boundary info
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.