Trie Node Design and Initialization in DSA Typescript - Time & Space Complexity
We want to understand how much work it takes to create a single node in a Trie.
This helps us see how the Trie grows as we add words.
Analyze the time complexity of the following code snippet.
class TrieNode {
children: Map;
isEndOfWord: boolean;
constructor() {
this.children = new Map();
this.isEndOfWord = false;
}
}
This code creates a Trie node with a map for children and a flag for word end.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating an empty map and setting a boolean flag.
- How many times: Once per node creation.
Each time we create a node, we do a fixed amount of work.
| Input Size (n nodes) | Approx. Operations |
|---|---|
| 10 | 10 simple initializations |
| 100 | 100 simple initializations |
| 1000 | 1000 simple initializations |
Pattern observation: The work grows directly with the number of nodes created.
Time Complexity: O(1)
This means creating each Trie node takes the same small amount of time, no matter what.
[X] Wrong: "Creating a Trie node takes longer as the Trie grows because it has more children."
[OK] Correct: Each node starts empty with no children; the initialization work is always the same small step.
Understanding this simple step helps you build efficient Tries and shows you know how data structures grow step-by-step.
"What if we used an array of fixed size 26 instead of a Map for children? How would the time complexity change?"
Practice
Solution
Step 1: Understand Trie node role
A Trie node stores a character and links to child nodes representing possible next characters in words.Step 2: Eliminate incorrect options
The remaining options do not describe the Trie node's role correctly.Final Answer:
To store characters and links to child nodes representing prefixes -> Option AQuick Check:
Trie node = character + child links [OK]
- Thinking Trie nodes store full words
- Confusing Trie nodes with arrays or queues
- Assuming Trie nodes store integer values
Solution
Step 1: Check children type
Children should be a Map from string to TrieNode, not string[] or Map.Step 2: Check endOfWord type and initialization
endOfWord should be boolean, initialized to false.Final Answer:
class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } } -> Option BQuick Check:
Children: Map<string, TrieNode> + boolean endOfWord=false [OK]
- Using array instead of Map for children
- Using wrong types for endOfWord
- Initializing endOfWord to true by default
console.log(root.children.has('a')) after execution?class TrieNode {
children: Map;
endOfWord: boolean;
constructor() {
this.children = new Map();
this.endOfWord = false;
}
}
const root = new TrieNode();
root.children.set('a', new TrieNode());
Solution
Step 1: Understand children map after insertion
We add a key 'a' with a new TrieNode as value to root.children map.Step 2: Check if 'a' key exists
Calling root.children.has('a') returns true because 'a' was added.Final Answer:
true -> Option CQuick Check:
Map has key 'a' = true [OK]
- Assuming has returns the value instead of boolean
- Confusing undefined with false
- Expecting error due to missing key
class TrieNode {
children: Map;
endOfWord: boolean;
constructor() {
this.children = new Map();
this.endOfWord = 'false';
}
}Solution
Step 1: Check endOfWord type and assignment
endOfWord is declared boolean but assigned string 'false', causing type error.Step 2: Verify children initialization and syntax
children map is correctly initialized; semicolons are optional in TypeScript; keys as string are correct.Final Answer:
endOfWord is assigned a string instead of boolean -> Option AQuick Check:
Boolean variable assigned string = error [OK]
- Assigning 'false' (string) instead of false (boolean)
- Thinking Map keys must be numbers
- Confusing missing semicolons as errors
Solution
Step 1: Consider Unicode support for children keys
Map supports any string keys including Unicode characters efficiently.Step 2: Check endOfWord type for marking word end
Boolean endOfWord initialized to false is standard to mark if node ends a word.Step 3: Evaluate other options
Objects with fixed keys limit flexibility; arrays indexed by char code waste space; Set<string> cannot map to child nodes.Final Answer:
Use a Map for children and a boolean endOfWord initialized to false -> Option DQuick Check:
Unicode keys + boolean flag = Use a Map for children and a boolean endOfWord initialized to false [OK]
- Using arrays limits Unicode support
- Using Set for children loses child node mapping
- Using string instead of boolean for endOfWord
Ready to prove it?
Pass the test and this pattern moves unknown
