LeetCode 208. Implement Trie (Prefix Tree)

Description

https://leetcode.com/problems/implement-trie-prefix-tree/

Implement a trie with insertsearch, and startsWith methods.

Example:

Trie trie = new Trie();

trie.insert("apple");
trie.search("apple");   // returns true
trie.search("app");     // returns false
trie.startsWith("app"); // returns true
trie.insert("app");   
trie.search("app");     // returns true

Note:

  • You may assume that all inputs are consist of lowercase letters a-z.
  • All inputs are guaranteed to be non-empty strings.

Explanation

One TrieNode has its children which can be implemented by dictionaries.

Python Solution

class TrieNode:
    
    def __init__(self):
        self.children = {}
        self.is_word = False
    
class Trie:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.root = TrieNode()

    def insert(self, word: str) -> None:
        """
        Inserts a word into the trie.
        """
        node = self.root
        
        for char in word:
            child = node.children.get(char)
            
            if not child:
                child = TrieNode()
                node.children[char] = child
            node = child
        
        node.is_word = True
            
        

    def search(self, word: str) -> bool:
        """
        Returns if the word is in the trie.
        """
        node = self.root
        
        for char in word:
            child = node.children.get(char)
            
            if not child:
                return False            

            node = child
        
        return node.is_word
            
            
        

    def startsWith(self, prefix: str) -> bool:
        """
        Returns if there is any word in the trie that starts with the given prefix.
        """
        node = self.root
        
        for char in prefix:
            child = node.children.get(char)
            
            if not child:
                return False
            
            node = child
        
        return True

# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)
  • Time Complexity: ~M
  • Space Complexity: ~1

Leave a Reply

Your email address will not be published. Required fields are marked *