📖 Scenario: Imagine you are building a simple phone contact search system. You want to store names so that you can quickly find if a name exists or starts with certain letters.
🎯 Goal: You will build a Trie data structure and implement the insert operation to add names into it.
📋 What You'll Learn
Create a TrieNode class with an array of children for 26 lowercase English letters and a boolean to mark the end of a word.
Create a Trie class with a root TrieNode.
Implement the insert method in the Trie class to add a word.
Print the Trie structure after inserting all words to verify insertion.
💡 Why This Matters
🌍 Real World
Tries are used in autocomplete systems, spell checkers, and IP routing to quickly find words or prefixes.
💼 Career
Understanding Trie insertions is important for roles involving search engines, text processing, and efficient data retrieval.
Progress0 / 4 steps
1
Create TrieNode class and Trie root
Create a class called TrieNode with a TrieNode[] children array of size 26 and a boolean isEndOfWord. Then create a class called Trie with a root variable initialized as a new TrieNode.
DSA Java
Hint
Think of TrieNode as a box with 26 slots for letters and a flag to say if a word ends here.
2
Add insert method signature and helper variable
Inside the Trie class, add a public method called insert that takes a String word as input. Also, create a local variable node and set it to root inside the method.
DSA Java
Hint
The insert method will add letters one by one. Start by pointing node to the root.
3
Implement the insert logic to add each character
Inside the insert method, use a for loop with variable i from 0 to word.length(). For each character ch in word, calculate index = ch - 'a'. If node.children[index] is null, create a new TrieNode there. Then move node to node.children[index]. After the loop, set node.isEndOfWord = true.
DSA Java
Hint
Think of walking down the tree for each letter. If a path is missing, create it.
4
Insert words and print confirmation
Create a main method in a Solution class. Inside main, create a Trie object called trie. Insert the words "apple", "app", and "bat" using trie.insert. Then print "Inserted words: apple, app, bat".
DSA Java
Hint
Use System.out.println to print the confirmation message after inserting all words.
Practice
(1/5)
1. What is the main purpose of the insert operation in a Trie data structure?
easy
A. To count the number of words stored in the Trie
B. To delete a word from the Trie
C. To add a new word character by character into the Trie
D. To search for a word in the Trie
Solution
Step 1: Understand the insert operation
The insert operation adds each character of a word into the Trie, creating nodes if needed.
Step 2: Identify the purpose of insert
It builds the Trie structure by adding new words character by character.
Final Answer:
To add a new word character by character into the Trie -> Option C
Quick Check:
Insert = Add word stepwise [OK]
Hint: Insert means adding word letters step-by-step [OK]
Common Mistakes:
Confusing insert with search or delete
Thinking insert counts words
Assuming insert removes words
2. Which of the following is the correct way to start inserting a word "cat" into a Trie in Java?
easy
A. for (int i = 0; i < word.length(); i++)
B. for (int i = 0; i <= word.length(); i++)
C. for (int i = 1; i < word.length(); i++)
D. for (int i = 1; i <= word.length(); i++)
Solution
Step 1: Check loop boundaries for string indexing
Java strings are zero-indexed, so loop should start at 0 and go to length-1.
Step 2: Choose correct loop condition
The loop must run while i < word.length() to cover all characters.
Final Answer:
for (int i = 0; i < word.length(); i++) -> Option A
Quick Check:
Loop from 0 to length-1 [OK]
Hint: Use i < length for zero-based string loops [OK]
Common Mistakes:
Using <= causes index out of bounds
Starting loop at 1 skips first character
Using wrong loop limits
3. What will be the state of the Trie after inserting the words "bat" and "ball" in order? Assume each node stores a character and a boolean isEnd to mark word end.
medium
A. "b" -> "a" -> "l" -> "l" (isEnd=true), "a" -> "t" (isEnd=true)
B. "b" -> "a" -> "t" (isEnd=true), "t" -> "l" -> "l" (isEnd=true)
C. "b" -> "a" -> "l" -> "l" (isEnd=false), "t" (isEnd=true)
D. "b" -> "a" -> "t" (isEnd=true), "a" -> "l" -> "l" (isEnd=true)
Solution
Step 1: Insert "bat" into Trie
Insert nodes for 'b' -> 'a' -> 't' and mark 't' node as word end.
Step 2: Insert "ball" sharing prefix
Reuse 'b' -> 'a', then add 'l' -> 'l' nodes and mark last 'l' as word end.
Final Answer:
"b" -> "a" -> "t" (isEnd=true), "a" -> "l" -> "l" (isEnd=true) -> Option D
4. Given the following Java code snippet for inserting a word into a Trie, what is the error?
void insert(String word) {
TrieNode node = root;
for (int i = 0; i <= word.length(); i++) {
char ch = word.charAt(i);
if (!node.children.containsKey(ch)) {
node.children.put(ch, new TrieNode());
}
node = node.children.get(ch);
}
node.isEnd = true;
}
medium
A. Missing initialization of root node
B. Loop condition should be i < word.length(), not i <= word.length()
C. Should use node.children.get(ch) before checking containsKey
D. isEnd should be set before the loop
Solution
Step 1: Analyze loop boundary
The loop uses i <= word.length(), which causes index out of bounds on charAt.
Step 2: Correct loop condition
It should be i < word.length() to avoid accessing invalid index.
Final Answer:
Loop condition should be i < word.length(), not i <= word.length() -> Option B
Quick Check:
Index error fixed by i < length [OK]
Hint: Loop to length-1 for string indexing [OK]
Common Mistakes:
Using <= causes runtime error
Setting isEnd inside loop
Checking children incorrectly
5. You want to insert the words "apple", "app", and "ape" into a Trie. After insertion, which of the following statements is TRUE about the Trie structure?
hard
A. The node for the second 'p' after 'a' will have isEnd = true because of "app"
B. The node for 'e' after 'a' will have isEnd = false because "ape" is not a full word
C. The node for 'l' after 'p' will have isEnd = false because "apple" is not inserted fully
D. All nodes except root have isEnd = true
Solution
Step 1: Insert "apple" and "app" sharing prefix
Both share 'a' -> 'p' -> 'p'. The second 'p' node marks end for "app".
Step 2: Insert "ape" branching at second character
From 'a', branch to 'p' then 'e' node marked as end for "ape".
Step 3: Check isEnd flags
The second 'p' node after 'a' has isEnd true for "app"; 'e' node after 'p' has isEnd true for "ape"; final 'e' node for "apple" has isEnd true.
Final Answer:
The node for the second 'p' after 'a' will have isEnd = true because of "app" -> Option A
Quick Check:
Shared prefix nodes mark word ends correctly [OK]
Hint: Shared prefixes mark ends for shorter words [OK]
Common Mistakes:
Assuming branch nodes can't be word ends
Thinking partial words are not marked
Marking all nodes as word ends
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.