📖 Scenario: You are building a simple search feature for a phone contacts app. To do this efficiently, you want to create a Trie data structure. The first step is to design and initialize a Trie node that will hold each letter and its children.
🎯 Goal: Create a TypeScript class for a Trie node with properties to store child nodes and a flag to mark the end of a word.
📋 What You'll Learn
Create a class called TrieNode
Add a property called children which is a Map from string to TrieNode
Add a boolean property called isEndOfWord initialized to false
Add a constructor that initializes children as an empty Map and isEndOfWord as false
💡 Why This Matters
🌍 Real World
Tries are used in search engines, autocomplete features, and spell checkers to quickly find words or prefixes.
💼 Career
Understanding Trie node design is important for software engineers working on text processing, search optimization, and data structure implementation.
Progress0 / 4 steps
1
Create the TrieNode class
Create a TypeScript class called TrieNode with no properties or methods yet.
DSA Typescript
Hint
Use the class keyword followed by TrieNode to start your class.
2
Add children property
Inside the TrieNode class, add a public property called children of type Map<string, TrieNode>.
DSA Typescript
Hint
Use public children: Map<string, TrieNode>; inside the class.
3
Add isEndOfWord property and constructor
Add a public boolean property called isEndOfWord initialized to false. Then add a constructor that initializes children as an empty Map and isEndOfWord as false.
DSA Typescript
Hint
Define isEndOfWord as a boolean property. In the constructor, set children to a new empty Map and isEndOfWord to false.
4
Print a new TrieNode instance
Create a new instance of TrieNode called node and print it using console.log(node).
DSA Typescript
Hint
Use const node = new TrieNode(); and then console.log(node); to see the node's properties.
Practice
(1/5)
1. What is the primary purpose of a Trie node in a Trie data structure?
easy
A. To store characters and links to child nodes representing prefixes
B. To store integer values for sorting
C. To hold a single string value only
D. To act as a queue for BFS traversal
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 A
Quick Check:
Trie node = character + child links [OK]
Hint: Trie nodes hold characters and children, not full words [OK]
Common Mistakes:
Thinking Trie nodes store full words
Confusing Trie nodes with arrays or queues
Assuming Trie nodes store integer values
2. Which of the following is the correct TypeScript syntax to declare a Trie node class with a children map and an endOfWord boolean?
easy
A. class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = true; } }
B. class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } }
C. class TrieNode { children: string[]; endOfWord: string; constructor() { this.children = []; this.endOfWord = ''; } }
D. class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } }
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 B
Hint: Children map keys are characters (string), values are TrieNodes [OK]
Common Mistakes:
Using array instead of Map for children
Using wrong types for endOfWord
Initializing endOfWord to true by default
3. Given the following TypeScript TrieNode class and code snippet, what will be the output of 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());
medium
A. undefined
B. false
C. true
D. Error
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 C
Quick Check:
Map has key 'a' = true [OK]
Hint: Map.has(key) returns true if key was set before [OK]
Common Mistakes:
Assuming has returns the value instead of boolean
Confusing undefined with false
Expecting error due to missing key
4. Identify the error in the following TypeScript TrieNode class code snippet:
class TrieNode {
children: Map;
endOfWord: boolean;
constructor() {
this.children = new Map();
this.endOfWord = 'false';
}
}
medium
A. endOfWord is assigned a string instead of boolean
B. children map is not initialized
C. Missing semicolon after constructor
D. Map keys should be number, not string
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 A
Quick Check:
Boolean variable assigned string = error [OK]
Hint: Boolean variables must be true or false, not strings [OK]
Common Mistakes:
Assigning 'false' (string) instead of false (boolean)
Thinking Map keys must be numbers
Confusing missing semicolons as errors
5. You want to design a TrieNode class in TypeScript that supports Unicode characters as keys and efficiently checks if a node marks the end of a word. Which of the following is the best design choice?
hard
A. Use a Set<string> for children and a boolean endOfWord initialized to true
B. Use an object with fixed keys for children and a string endOfWord to store word
C. Use an array of TrieNode for children indexed by character code and endOfWord as number
D. Use a Map for children and a boolean endOfWord initialized to false
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 D
Quick Check:
Unicode keys + boolean flag = Use a Map for children and a boolean endOfWord initialized to false [OK]
Hint: Map handles Unicode keys best [OK]
Common Mistakes:
Using arrays limits Unicode support
Using Set for children loses child node mapping
Using string instead of boolean for endOfWord
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.