Advertisement
Guest User

Untitled

a guest
Oct 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.41 KB | None | 0 0
  1. class Tree:
  2.     def __init__(self):
  3.         self.children = [None] * 26
  4.         self.end = False
  5.    
  6.     def free(self):
  7.         for c in self.children:
  8.             if c:
  9.                 return False
  10.         return True
  11.  
  12.  
  13. class Trie:
  14.     def __init__(self):
  15.         self.root = self._get_tree()
  16.  
  17.     def _get_tree(self):
  18.         return Tree()
  19.  
  20.     def _get_char_idx(self, char):
  21.         return ord('a') - ord(char)
  22.  
  23.     def add(self, key):
  24.         tree = self.root
  25.         for c in key:
  26.             char_idx = self._get_char_idx(c)
  27.  
  28.             if not tree.children[char_idx]:
  29.                 tree.children[char_idx] = self._get_tree()
  30.  
  31.             tree = tree.children[char_idx]
  32.  
  33.         tree.end = True
  34.  
  35.  
  36.     def search(self, key):
  37.         tree = self.root
  38.         for c in key:
  39.             char_idx = self._get_char_idx(c)
  40.             if not tree.children[char_idx]:
  41.                 return False
  42.  
  43.             tree = tree.children[char_idx]
  44.  
  45.         return tree and tree.end
  46.    
  47.  
  48.     def _delete(self, node, key, pos, key_len):
  49.         if not node:
  50.             return False
  51.  
  52.         if pos == key_len:
  53.             if node.end:
  54.                 node.end = False
  55.             return node.free()
  56.        
  57.         char_idx = self._get_char_idx(key[pos])
  58.         if self._delete(
  59.             node.children[char_idx], key, pos+1, key_len):
  60.  
  61.             del node.children[char_idx]
  62.            
  63.             return not node.end and node.free()
  64.  
  65.         return False
  66.  
  67.     def delete_key(self, key):
  68.         key_len = len(key)
  69.         if key_len > 0:
  70.             return self._delete(self.root, key, 0, key_len)
  71.         return False
  72.  
  73.  
  74.   # Input keys (use only 'a' through 'z' and lower case)
  75. keys = ["the","a","there","anaswe","any",
  76.         "by","their"]
  77. output = ["Not present in trie",
  78.             "Present in trie"]
  79.  
  80. # Trie object
  81. t = Trie()
  82. # Construct trie
  83. for key in keys:
  84.     t.add(key)
  85.  
  86. # Search for different keys
  87. print("{} ---- {}".format("the",output[t.search("the")]))
  88. print("{} ---- {}".format("these",output[t.search("these")]))
  89. print("{} ---- {}".format("their",output[t.search("their")]))
  90. print("{} ---- {}".format("thaw",output[t.search("thaw")]))
  91.  
  92.  
  93. key = "the"
  94. print("{} ---- {}".format(key, output[t.search(key)]))
  95. print("{} ---- {}".format(key, output[t.search(key)]))
  96. print("{} ---- {}".format("their", output[t.search("their")]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement