문자열 탐색을 효율적으로 수행하기 위한 Tree 기반 자료구조이다. 문자열 검색, 자동완성, 사전 구현 등에 사용된다.
각 노드가 한개의 문자를 저장하는 트리 구조이다. 루트 노드는 공백이고, 각 간선은 문자를 나타낸다. 문자열이 삽입될 때, 각 문자의 경로를 따라 노드를 생성하고, 문자열의 끝을 나타내는 flag를 사용해 특정 단어가 저장되었음을 나타낸다.
        Trie 기본 구조 (be,bee,can,cat,cd를 insert한 구조)
다음과 같은 연산을 지원한다.
  기존 Trie 자료구조에 bed 단어 삽입
# Trie 자료구조
class Node(object):
    def __init__(self,key,data=None):
        self.key=key
        self.data=data
        self.child={}
class Trie(object):
    def __init__(self):
        self.head=Node(None) # key가 None인 Head 초기화
    def insert(self,string):
        curr_node=self.head # curr_node는 Node 클래스의 객체
        for char in string:
            if char not in curr_node.child: # string의 글자들이 child에 있는지 확인하기
                curr_node.child[char]=Node(char) # char 문자를 key로 가지는 노드 생성(curr_node의 child로)
            # curr_node의 child에 char가 있으면 해당 node로 이동!
            curr_node=curr_node.child[char]
        # 끝까지 이동한 이후 curr_node의 data에 string값 넣어줌
        curr_node.data=string
    def search(self,string):
        curr_node=self.head
        for char in string:
            if char in curr_node.child:
                curr_node=curr_node.child[char]
            else:
                return False
            
        if curr_node.data is not None: # 탐색이 모두 종료된 이후에 data에 값이 들어있으면 탐색 완료!
            return True
        else:
            return False
        
trie=Trie()
trie.insert('abc')
trie.insert('car')
print(trie.search('ab'))
print(trie.search('car'))