Bird
Raised Fist0
DSA Javaprogramming~10 mins

Word Search in Trie in DSA Java - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a new TrieNode.

DSA Java
class TrieNode {
    boolean isWord;
    TrieNode[] children = new TrieNode[26];

    public TrieNode() {
        isWord = [1];
    }
}
Drag options to blanks, or click blank then click option'
Anull
Bfalse
Ctrue
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Setting isWord to true by default, which incorrectly marks all nodes as word ends.
2fill in blank
medium

Complete the code to insert a character into the Trie children array.

DSA Java
public void insert(String word) {
    TrieNode node = root;
    for (char c : word.toCharArray()) {
        int index = c - 'a';
        if (node.children[[1]] == null) {
            node.children[index] = new TrieNode();
        }
        node = node.children[index];
    }
    node.isWord = true;
}
Drag options to blanks, or click blank then click option'
Ac
Bword
Cnode
Dindex
Attempts:
3 left
💡 Hint
Common Mistakes
Using the character c directly as an index, which causes errors.
Using the node or word variable incorrectly as an index.
3fill in blank
hard

Fix the error in the search method to check if a word exists in the Trie.

DSA Java
public boolean search(String word) {
    TrieNode node = root;
    for (char c : word.toCharArray()) {
        int index = c - 'a';
        if (node.children[index] == null) {
            return [1];
        }
        node = node.children[index];
    }
    return node.isWord;
}
Drag options to blanks, or click blank then click option'
Afalse
Btrue
Cnull
Dnode == null
Attempts:
3 left
💡 Hint
Common Mistakes
Returning true when the path is missing, causing false positives.
Returning null or checking node == null incorrectly.
4fill in blank
hard

Fill both blanks to implement a method that checks if any word starts with a given prefix.

DSA Java
public boolean startsWith(String prefix) {
    TrieNode node = root;
    for (char c : prefix.toCharArray()) {
        int index = c - 'a';
        if (node.children[[1]] == null) {
            return [2];
        }
        node = node.children[index];
    }
    return true;
}
Drag options to blanks, or click blank then click option'
Aindex
Btrue
Cfalse
Dc
Attempts:
3 left
💡 Hint
Common Mistakes
Using character c directly as index.
Returning true when the path is missing.
5fill in blank
hard

Fill all three blanks to implement a method that deletes a word from the Trie recursively.

DSA Java
private boolean delete(TrieNode node, String word, int depth) {
    if (node == null) {
        return [1];
    }
    if (depth == word.length()) {
        if (node.isWord) {
            node.isWord = false;
            return nodeHasNoChildren(node);
        }
        return false;
    }
    int index = word.charAt(depth) - 'a';
    boolean shouldDeleteCurrentNode = delete(node.children[[2]], word, depth + 1);
    if (shouldDeleteCurrentNode) {
        node.children[[3]] = null;
        return !node.isWord && nodeHasNoChildren(node);
    }
    return false;
}

private boolean nodeHasNoChildren(TrieNode node) {
    for (TrieNode child : node.children) {
        if (child != null) {
            return false;
        }
    }
    return true;
}
Drag options to blanks, or click blank then click option'
Afalse
Btrue
Cindex
Ddepth
Attempts:
3 left
💡 Hint
Common Mistakes
Returning true when node is null, causing incorrect deletion.
Using depth instead of index to access children.
Not setting the child to null after deletion.

Practice

(1/5)
1. What is the main purpose of using a Trie data structure in word search problems?
easy
A. To perform arithmetic operations on words
B. To sort words alphabetically
C. To store words in a linked list
D. To efficiently store and search words by their prefixes

Solution

  1. Step 1: Understand Trie structure

    A Trie stores characters of words in a tree-like structure where each node represents a character.
  2. Step 2: Identify Trie usage in word search

    It allows quick prefix-based search, making it efficient to find words starting with given letters.
  3. Final Answer:

    To efficiently store and search words by their prefixes -> Option D
  4. Quick Check:

    Trie = prefix search [OK]
Hint: Trie is all about prefix-based fast word search [OK]
Common Mistakes:
  • Confusing Trie with sorting data structures
  • Thinking Trie stores words as linked lists
  • Assuming Trie performs arithmetic on words
2. Which of the following is the correct way to declare a Trie node class in Java?
easy
A. class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; }
B. class TrieNode { int val; TrieNode children; boolean isWord; }
C. class TrieNode { String val; TrieNode[] children = new TrieNode[26]; }
D. class TrieNode { char val; List<TrieNode> children; boolean isWord; }

Solution

  1. Step 1: Check data types for Trie node

    Each node stores a character, an array of 26 children for letters a-z, and a boolean to mark word end.
  2. Step 2: Validate options

    class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; } matches this structure exactly with char val, TrieNode[] children of size 26, and boolean isWord.
  3. Final Answer:

    class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; } -> Option A
  4. Quick Check:

    Correct TrieNode declaration = class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; } [OK]
Hint: Trie nodes use char + array of 26 children + boolean flag [OK]
Common Mistakes:
  • Using int or String instead of char for node value
  • Using single child instead of array for children
  • Using List instead of fixed-size array for children
3. What will be the output of the following Java code snippet that inserts words into a Trie and searches for "cat"?
class TrieNode {
  TrieNode[] children = new TrieNode[26];
  boolean isWord = false;
}

class Trie {
  TrieNode root = new TrieNode();

  void insert(String word) {
    TrieNode node = root;
    for (char c : word.toCharArray()) {
      int idx = c - 'a';
      if (node.children[idx] == null) node.children[idx] = new TrieNode();
      node = node.children[idx];
    }
    node.isWord = true;
  }

  boolean search(String word) {
    TrieNode node = root;
    for (char c : word.toCharArray()) {
      int idx = c - 'a';
      if (node.children[idx] == null) return false;
      node = node.children[idx];
    }
    return node.isWord;
  }
}

public class Main {
  public static void main(String[] args) {
    Trie trie = new Trie();
    trie.insert("cat");
    trie.insert("car");
    System.out.println(trie.search("cat"));
    System.out.println(trie.search("cap"));
  }
}
medium
A. false false
B. true false
C. true true
D. false true

Solution

  1. Step 1: Insert words "cat" and "car" into Trie

    Both words are inserted character by character, marking the last node's isWord as true.
  2. Step 2: Search for "cat" and "cap"

    "cat" exists with isWord true, so search returns true. "cap" path is missing 'p' node, so returns false.
  3. Final Answer:

    true false -> Option B
  4. Quick Check:

    Inserted words found = true, missing word = false [OK]
Hint: Search returns true only if full word path and isWord true [OK]
Common Mistakes:
  • Assuming partial prefix returns true
  • Not marking isWord correctly on insert
  • Confusing character indexing in children array
4. Identify the bug in the following Trie search method and choose the correct fix:
boolean search(String word) {
  TrieNode node = root;
  for (int i = 0; i <= word.length(); i++) {
    int idx = word.charAt(i) - 'a';
    if (node.children[idx] == null) return false;
    node = node.children[idx];
  }
  return node.isWord;
}
medium
A. Initialize idx before loop
B. Return true inside the loop
C. Change loop condition to i < word.length()
D. Remove return statement inside loop

Solution

  1. Step 1: Analyze loop boundary

    The loop runs from i = 0 to i <= word.length(), which causes index out of bounds at last iteration.
  2. Step 2: Fix loop condition

    Changing condition to i < word.length() prevents accessing invalid index and correctly iterates over characters.
  3. Final Answer:

    Change loop condition to i < word.length() -> Option C
  4. Quick Check:

    Loop boundary fix prevents index error [OK]
Hint: Loop over string chars with i < length, not <= length [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Trying to fix by moving idx initialization
  • Removing return inside loop causing wrong logic
5. Given a 2D board of characters and a list of words, which approach best uses a Trie to efficiently find all words present on the board? A sample board:
[
  ['o','a','a','n'],
  ['e','t','a','e'],
  ['i','h','k','r'],
  ['i','f','l','v']
]
Words: ["oath", "pea", "eat", "rain"]
hard
A. Build a Trie from words, then DFS on board checking prefixes in Trie
B. Check each word by scanning entire board without Trie
C. Use a hash set for words and scan board rows only
D. Sort words and board rows, then binary search each word

Solution

  1. Step 1: Build Trie from given words

    Insert all words into a Trie to enable prefix checking during search.
  2. Step 2: Perform DFS on board cells

    From each cell, explore neighbors recursively, checking if current path matches any prefix in Trie to prune search.
  3. Step 3: Collect words found when Trie node marks word end

    This approach efficiently finds all words without redundant searches.
  4. Final Answer:

    Build a Trie from words, then DFS on board checking prefixes in Trie -> Option A
  5. Quick Check:

    Trie + DFS = efficient word search on board [OK]
Hint: Use Trie for prefix pruning during DFS on board [OK]
Common Mistakes:
  • Searching words one by one scanning whole board
  • Ignoring prefix pruning causing slow search
  • Using sorting and binary search which doesn't fit 2D board
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard