Bird
Raised Fist0
DSA Typescriptprogramming~10 mins

Trie Insert Operation in DSA Typescript - Execution Trace

Choose your learning style10 modes available
Concept Flow - Trie Insert Operation
Start at root node
↓
For each character in word
↓
Check if child node exists
↓
Move to child
↓
Repeat for next character
↓
Mark last node as end of word
↓
Done
Insert each character by traversing or creating nodes, then mark the last node as end of word.
Execution Sample
DSA Typescript
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;
}
Inserts a word into the trie by creating nodes for missing characters and marking the end.
Execution Table
StepOperationCharacterNode VisitedPointer ChangesTrie Visual State
1Start insertion-rootnode = rootroot (children: {})
2Check 'c' in root childrencrootCreate node for 'c'root (children: {c}) c (children: {})
3Move to node 'c'cnode 'c'node = node 'c'root (children: {c}) c (children: {})
4Check 'a' in node 'c' childrenanode 'c'Create node for 'a'root (children: {c}) c (children: {a}) a (children: {})
5Move to node 'a'anode 'a'node = node 'a'root (children: {c}) c (children: {a}) a (children: {})
6Check 't' in node 'a' childrentnode 'a'Create node for 't'root (children: {c}) c (children: {a}) a (children: {t}) t (children: {})
7Move to node 't'tnode 't'node = node 't'root (children: {c}) c (children: {a}) a (children: {t}) t (children: {})
8Mark node 't' as end of word-node 't'node.isEnd = trueroot (children: {c}) c (children: {a}) a (children: {t}) t* (end)
9Insertion complete-node 't'-root (children: {c}) c (children: {a}) a (children: {t}) t* (end)
💡 All characters processed and last node marked as end of word.
Variable Tracker
VariableStartAfter Step 3After Step 5After Step 7After Step 8Final
noderootnode 'c'node 'a'node 't'node 't' (isEnd=true)node 't' (isEnd=true)
Key Moments - 3 Insights
Why do we create a new node only if the character is not already a child?
Because if the child node exists (see step 3 and 5), we just move to it to reuse existing paths, avoiding duplicates.
Why do we mark the last node as end of word?
Marking the last node (step 8) tells the trie that a complete word ends here, distinguishing prefixes from full words.
What happens if we insert a word that shares prefix with existing words?
We reuse existing nodes for shared characters (steps 2-7), only creating new nodes for characters not present.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the node visited at step 5?
Anode 'c'
Bnode 'a'
Cnode 't'
Droot
💡 Hint
Check the 'Node Visited' column at step 5 in the execution table.
At which step is the node for character 't' created?
AStep 6
BStep 3
CStep 4
DStep 2
💡 Hint
Look at the 'Pointer Changes' column for creation of nodes in the execution table.
If the word 'cat' was already in the trie, what would happen at step 2?
ACreate new node for 'c'
BMark node 'c' as end of word
CMove to existing node 'c'
DStop insertion
💡 Hint
Refer to the condition check and pointer changes in the execution table steps.
Concept Snapshot
Trie Insert Operation:
- Start at root node
- For each character:
  - If child exists, move to it
  - Else create new child node
- Mark last node as end of word
- Reuses prefixes to save space
Full Transcript
The Trie Insert Operation starts at the root node. For each character in the word, it checks if a child node exists. If yes, it moves to that node; if not, it creates a new node. After processing all characters, it marks the last node as the end of the word. This process efficiently stores words by sharing common prefixes.

Practice

(1/5)
1. What is the main purpose of the insert operation in a Trie data structure?
easy
A. To add a word character by character into the Trie
B. To delete a word from the Trie
C. To search for a word in the Trie
D. To count the number of words in the Trie

Solution

  1. Step 1: Understand the insert operation

    The insert operation adds each character of a word into the Trie one by one, creating new nodes if needed.
  2. Step 2: Differentiate from other operations

    Deleting removes words, searching finds words, counting totals words. Insert specifically adds words.
  3. Final Answer:

    To add a word character by character into the Trie -> Option A
  4. Quick Check:

    Insert = Add word [OK]
Hint: Insert means adding word step-by-step [OK]
Common Mistakes:
  • Confusing insert with search or delete
  • Thinking insert counts words
  • Assuming insert replaces words
2. Which of the following is the correct TypeScript syntax to start inserting a word into a Trie node named root?
easy
A. let node = root;
B. node = root;
C. const node = root()
D. var node == root;

Solution

  1. Step 1: Understand variable declaration in TypeScript

    Using let declares a variable that can be reassigned, suitable for traversal nodes.
  2. Step 2: Check syntax correctness

    let node = root; uses correct assignment with let. node = root; misses declaration keyword. const node = root() wrongly calls root as a function. var node == root; uses invalid comparison operator.
  3. Final Answer:

    let node = root; -> Option A
  4. Quick Check:

    Correct variable declaration = let node = root; [OK]
Hint: Use let for variable assignment in TypeScript [OK]
Common Mistakes:
  • Missing let or const keyword
  • Using == instead of = for assignment
  • Calling node as a function
3. Given the following TypeScript code snippet for inserting the word "cat" into an empty Trie, what will be the printed output after insertion?
class TrieNode {
  children: Map = new Map();
  isEndOfWord = false;
}

const root = new TrieNode();

function insert(word: string) {
  let node = root;
  for (const char of word) {
    if (!node.children.has(char)) {
      node.children.set(char, new TrieNode());
    }
    node = node.children.get(char)!;
  }
  node.isEndOfWord = true;
}

insert("cat");

console.log(Array.from(root.children.keys()));
medium
A. ["cat"]
B. ["c", "a", "t"]
C. []
D. ["c"]

Solution

  1. Step 1: Trace insertion of "cat" into Trie

    Starting at root, 'c' is not present, so a new node for 'c' is created. Then move to 'c' node, 'a' is added as child, then 't' as child of 'a'.
  2. Step 2: Check root's children keys

    Root only has one child node for 'c'. The keys of root.children are ['c'].
  3. Final Answer:

    ["c"] -> Option D
  4. Quick Check:

    Root children keys after insert = ["c"] [OK]
Hint: Root children keys show first letters only [OK]
Common Mistakes:
  • Expecting all letters at root level
  • Confusing keys with full words
  • Ignoring Map keys method
4. Identify the error in the following TypeScript code snippet for inserting a word into a Trie:
function insert(word: string) {
  let node = root;
  for (const char of word) {
    if (!node.children.has(char)) {
      node.children.set(char, new TrieNode());
    }
    node = node.children.get(char);
  }
  node.isEndOfWord = true;
}
medium
A. Using 'let' instead of 'const' for node
B. Missing parentheses when creating new TrieNode
C. Not checking if node.children.get(char) is undefined
D. Not marking isEndOfWord as false initially

Solution

  1. Step 1: Check new object creation syntax

    In TypeScript, when creating a new object, parentheses are required even if no arguments are passed. new TrieNode should be new TrieNode().
  2. Step 2: Verify other parts

    Using 'let' for node is fine since node changes. The get method is safe here because we just set the key if missing. isEndOfWord is set at the end, initial value doesn't cause error.
  3. Final Answer:

    Missing parentheses when creating new TrieNode -> Option B
  4. Quick Check:

    new object needs () [OK]
Hint: Always use () when calling constructors [OK]
Common Mistakes:
  • Omitting () after new keyword
  • Confusing let and const for variables
  • Ignoring possible undefined from get()
5. You want to insert multiple words ["bat", "ball", "batman"] into a Trie. After inserting all, which of the following statements is true about the Trie structure?
hard
A. The node for 'b' has children 'a' and 'm' directly
B. Each word creates a separate branch from root
C. The node for 'b' has children 'a' only, and 'a' has children 't' and 'l'
D. The node for 't' is the end of word for both "bat" and "batman"

Solution

  1. Step 1: Analyze common prefixes in words

    Words "bat", "ball", and "batman" share prefix 'b' -> 'a'. From 'a', 't' leads to "bat" and "batman", 'l' leads to "ball".
  2. Step 2: Understand Trie branching

    Node 'b' has child 'a'. Node 'a' branches to 't' and 'l'. 'm' is child of 'a'->'t'->'m' for "batman". So 'm' is not direct child of 'b'.
  3. Final Answer:

    The node for 'b' has children 'a' only, and 'a' has children 't' and 'l' -> Option C
  4. Quick Check:

    Trie branches at shared prefixes [OK]
Hint: Words share nodes for common prefixes only [OK]
Common Mistakes:
  • Assuming all words start new branches at root
  • Thinking 'm' is direct child of 'b'
  • Confusing end of word nodes
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