Bird
Raised Fist0
DSA Typescriptprogramming~3 mins

Why Trie Insert Operation in DSA Typescript?

Choose your learning style10 modes available
The Big Idea

What if you could find or add any word instantly, no matter how big your list is?

The Scenario

Imagine you have a huge phone book written on paper. You want to find or add a new name quickly, but you have to flip through every page one by one.

It takes a lot of time and you might lose your place or make mistakes.

The Problem

Manually searching or adding names in a big list is slow and tiring.

You can easily miss names or add duplicates because you have no quick way to check if a name exists.

It's like looking for a word in a dictionary without alphabetical order.

The Solution

A Trie is like a smart tree that stores words letter by letter.

When you add a word, you follow the path of letters and create new branches only if needed.

This way, you quickly find or add words without checking the whole list.

Before vs After
✗ Before
let phoneBook = [];
// To add a name
phoneBook.push('Alice');
// To check if name exists
phoneBook.includes('Alice');
✓ After
class TrieNode {
  children: Map<string, TrieNode> = new Map();
  isWordEnd: boolean = false;
}

class Trie {
  root = new TrieNode();
  insert(word: string) {
    let current = this.root;
    for (const letter of word) {
      if (!current.children.has(letter)) {
        current.children.set(letter, new TrieNode());
      }
      current = current.children.get(letter)!;
    }
    current.isWordEnd = true;
  }
}
What It Enables

It lets you add and find words instantly, even in huge lists, by following letter paths.

Real Life Example

Autocomplete in search engines uses Tries to quickly suggest words as you type each letter.

Key Takeaways

Manual searching is slow and error-prone for large word lists.

Trie stores words letter by letter, making insertions fast and organized.

It enables quick word lookup and autocomplete features.

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