DEV Community

Cover image for What Is a Trie? The Data Structure Behind Autocomplete
OneDev
OneDev

Posted on

What Is a Trie? The Data Structure Behind Autocomplete

Ever wondered how search boxes suggest words as you type? Or how a spell checker knows what you probably meant to write?

Behind the scenes, there's a powerful but often underrated data structure making it all possible: the Trie (pronounced "try").

Let’s take a look 👇


🔠 What Is a Trie?

A Trie, also known as a prefix tree, is a tree-like data structure used to store a dynamic set of strings — especially useful for prefix-based lookups.

Each node in a trie represents a character, and by connecting nodes from top to bottom, you can represent entire words.


🧠 Real-World Use Cases

Tries shine when you’re dealing with words, prefixes, or partial matches. You’ll find them behind:

  • Autocomplete and search suggestions (e.g. Google search, VSCode IntelliSense)
  • Spell checkers and correctors
  • IP routing (longest prefix matching)
  • Word games like Boggle or Scrabble solvers
  • Dictionary or keyword matching systems

🔍 Why Not Just Use an Array or Hash Table?

Let’s say you have a list of 100,000 words. If you want to find all words that start with "cat", a trie can do that faster and more efficiently than scanning every word in an array or using a hash table.

Why? Because the structure of a trie naturally groups words by their prefixes, making lookups almost instantaneous.


⚙️ How It Works (At a High Level)

  • Each node represents a single character.
  • Children nodes represent possible next characters.
  • Words are built by walking down from the root node.
  • A special flag marks the end of a valid word.

Example: Storing "cat" and "car"

        (root)
        /   \
      c     ...
      |
      a
     / \
    t   r

Enter fullscreen mode Exit fullscreen mode

From the root, "c" leads to "a", which leads to "t" or "r" — forming "cat" and "car".


🚀 Benefits

  • Fast prefix searches (often O(k), where k is the length of the word)
  • Efficient memory usage for shared prefixes
  • Flexible: can be extended to support wildcard matching, autocomplete ranking, etc.

🤔 When to Reach for a Trie

  • You’re implementing a feature based on prefix matching
  • You need to do lots of lookups from a large dictionary of words
  • You want to build something like autocomplete, spellcheck, or typeahead

🧠 TL;DR

  • A Trie is a tree-like data structure designed for efficient prefix-based string matching.
  • It powers real-world features like autocomplete, search suggestions, and spellcheckers.
  • If you’re dealing with lots of strings and care about prefixes — Tries are worth knowing.

Top comments (0)