Skip to content

Commit bcf1911

Browse files
committed
Added a simple implementation of 'trie' data structure
1 parent b7a949a commit bcf1911

File tree

1 file changed

+69
-0
lines changed
  • chap08_membership_structures

1 file changed

+69
-0
lines changed

chap08_membership_structures/trie.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Ref: https://github.com/ZoranPandovski/al-go-rithms/tree/master/data_structures/trie
2+
3+
4+
FOUND = "found"
5+
NOT_FOUND = "not-found"
6+
7+
8+
class TrieNode:
9+
def __init__(self,):
10+
self.children = [None] * 26 # English alphabets
11+
self.is_end_of_word = False
12+
13+
14+
class Trie:
15+
def __init__(self):
16+
self.root = self.get_new_node()
17+
18+
def get_new_node(self):
19+
return TrieNode()
20+
21+
def insert(self, word: str) -> None:
22+
new_trie_node = self.root
23+
length = len(word)
24+
25+
for level in range(0, length):
26+
index = self._char_to_index(word[level])
27+
28+
if not new_trie_node.children[index]:
29+
new_trie_node.children[index] = self.get_new_node()
30+
31+
new_trie_node = new_trie_node.children[index]
32+
33+
new_trie_node.is_end_of_word = True
34+
35+
def search(self, word: str) -> str:
36+
new_trie_node = self.root
37+
length = len(word)
38+
39+
for level in range(0, length):
40+
index = self._char_to_index(word[level])
41+
42+
if not new_trie_node.children[index]:
43+
return NOT_FOUND
44+
45+
new_trie_node = new_trie_node.children[index]
46+
47+
if new_trie_node is not None and new_trie_node.is_end_of_word:
48+
return FOUND
49+
else:
50+
return NOT_FOUND
51+
52+
def _char_to_index(self, char: str) -> int:
53+
index: int = ord(char) - ord("a")
54+
return index
55+
56+
57+
def main() -> None:
58+
trie_node = Trie()
59+
words = ["the", "ah", "whoa"]
60+
61+
for word in words:
62+
trie_node.insert(word)
63+
64+
assert trie_node.search("the") == FOUND
65+
assert trie_node.search("who") == NOT_FOUND
66+
67+
68+
if "__main__" == __name__:
69+
main()

0 commit comments

Comments
 (0)