Advertisement
okpalan

tnary.py

May 14th, 2024
752
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | Fixit | 0 0
  1. class TnaryTreeNode:
  2.     def __init__(self, data):
  3.         self.children = [None, None, None]
  4.         self.data = data
  5.  
  6. class TnaryTree:
  7.     def __init__(self, data):
  8.         self.root = TnaryTreeNode(data)
  9.  
  10. def tnary_tree_node_add_child(parent, child):
  11.     for i in range(3):
  12.         if parent.children[i] is None:
  13.             parent.children[i] = child
  14.             return child
  15.     return None
  16.  
  17. def tnary_tree_serialize(fp, tree):
  18.     for i in range(3):
  19.         if tree.root.children[i] is not None:
  20.             fp.write(tree.root.children[i].data)
  21.  
  22. def tnary_tree_deserialize(fp):
  23.     data = fp.read(2)
  24.     return data
  25.  
  26. def tnary_tree_print(node, level):
  27.     if node is None:
  28.         return
  29.     for i in range(level):
  30.         print("| ", end="")
  31.     print(node.data)
  32.     for child in node.children:
  33.         tnary_tree_print(child, level + 1)
  34.  
  35. class MapNode:
  36.     def __init__(self, data):
  37.         self.data = data
  38.         self.next = None
  39.  
  40. class Map:
  41.     def __init__(self):
  42.         self.key = None
  43.         self.count = 0
  44.         self.value = [None] * 128
  45.  
  46. def map_hash(string):
  47.     hash_val = 5381
  48.     for char in string:
  49.         hash_val = ((hash_val << 5) + hash_val) + ord(char)
  50.     return hash_val % 128
  51.  
  52. def map_set(map, key, new_node):
  53.     hash_val = map_hash(key)
  54.     node = map.value[hash_val]
  55.     if node is None:
  56.         map.value[hash_val] = new_node
  57.         map.count += 1
  58.         return True
  59.     while node.next is not None:
  60.         node = node.next
  61.     node.next = new_node
  62.     map.count += 1
  63.     return True
  64.  
  65. def map_get(map, key):
  66.     hash_val = map_hash(key)
  67.     node = map.value[hash_val]
  68.     while node is not None:
  69.         if node.data == key:
  70.             return node
  71.         node = node.next
  72.     return None
  73.  
  74. def map_clear(map):
  75.     for i in range(128):
  76.         node = map.value[i]
  77.         while node is not None:
  78.             temp = node
  79.             node = node.next
  80.             del temp
  81.     del map
  82.  
  83. if __name__ == "__main__":
  84.     tree_node = TnaryTree("a")
  85.     node = TnaryTree("b")
  86.     tnary_tree_node_add_child(tree_node.root, node.root)
  87.     node = TnaryTree("c")
  88.     tnary_tree_node_add_child(tree_node.root, node.root)
  89.     node = TnaryTree("d")
  90.     tnary_tree_node_add_child(tree_node.root, node.root)
  91.  
  92.     with open("test.txt", "w") as fp:
  93.         tnary_tree_serialize(fp, tree_node)
  94.  
  95.     with open("test.txt", "r") as fp:
  96.         data = tnary_tree_deserialize(fp)
  97.         print("Deserialized data:", data)
  98.  
  99.     map_obj = Map()
  100.  
  101.     # Set data of tree_node root to contain characters within the node and add it to the Map
  102.     new_node_a = MapNode("a")
  103.     new_node_b = MapNode("b")
  104.     new_node_c = MapNode("c")
  105.     new_node_d = MapNode("d")
  106.  
  107.     map_set(map_obj, "fn", new_node_a)  # Function keyword
  108.     new_node_a.next = new_node_b
  109.  
  110.     map_set(map_obj, "b", new_node_b)
  111.     new_node_b.next = new_node_c
  112.  
  113.     map_set(map_obj, "c", new_node_c)
  114.     new_node_c.next = new_node_d
  115.  
  116.     map_set(map_obj, "d", new_node_d)
  117.  
  118.     # Retrieving and printing data from the map
  119.     print("Data in the map:")
  120.     map_node = map_get(map_obj, "fn")
  121.     print(map_node)
  122.  
  123.     for item in map_obj.value:
  124.         if item is not None:
  125.             print(item.data)
  126.  
  127.     # Freeing memory
  128.     map_clear(map_obj)
  129.  
  130.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement