Advertisement
2Susan2

3.zadanie

Jan 14th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.33 KB | None | 0 0
  1. class Item:
  2.     def __init__(self, value):
  3.         self.value = value
  4.         self.next = None
  5.  
  6. class Node:
  7.     def __init__(self, key, value):
  8.         self.key = key
  9.         self.value_list = Item(value)
  10.         self.left = self.right = None
  11.  
  12. class PriorityQueue:
  13.     def __init__(self):
  14.         self.root = None
  15.  
  16.     def add(self, key, value):
  17.         if self.root is None:
  18.             self.root = Node(key, value)
  19.             return
  20.         node = self.root
  21.         while True:
  22.             if key == node.key:
  23.                 item = node.value_list
  24.                 while item.next is not None:
  25.                     item = item.next
  26.                 item.next = Item(value)
  27.                 break
  28.             if key > node.key:
  29.                 if node.right is None:
  30.                     node.right = Node(key, value)
  31.                     break
  32.                 node = node.right
  33.             if key < node.key:
  34.                 if node.left is None:
  35.                     node.left = Node(key, value)
  36.                     break
  37.                 node = node.left
  38.            
  39.     def is_empty(self):
  40.         return self.root is None
  41.    
  42.     def min(self):
  43.         if self.root is None:
  44.             raise EmptyError
  45.         node = self.root
  46.         while node.left is not None:
  47.             node = node.left
  48.         return node.key, node.value_list.value
  49.  
  50.     def remove_min(self):
  51.         if self.root is None:
  52.             raise EmptyError
  53.         node = self.root
  54.         rodic = None
  55.         while node.left:
  56.             rodic = node
  57.             node = node.left
  58.  
  59.         if node.value_list.next:
  60.             value = node.value_list.value
  61.             node.value_list = node.value_list.next
  62.             return node.key, value
  63.         else:
  64.             if node.right is None:
  65.                 if rodic is None:
  66.                     vrat = node.key, node.value_list.value
  67.                     self.root = None
  68.                     return vrat
  69.                 vrat = node.key, node.value_list.value
  70.                 rodic.left = None
  71.                 return vrat
  72.             else:
  73.                 vrat = node.key, node.value_list.value
  74.                 node = node.right
  75.                 if rodic:
  76.                     rodic.left = node
  77.                 else:
  78.                     self.root = node
  79.                 return vrat
  80.        
  81.     def __len__(self):
  82.         if self.root is None:
  83.             return 0
  84.         stack = [self.root]
  85.         pocet = 0
  86.         while stack:
  87.             node = stack.pop()
  88.             zoznam = node.value_list
  89.             while zoznam:
  90.                 pocet += 1
  91.                 zoznam = zoznam.next
  92.             if node.left:
  93.                 stack.append(node.left)
  94.             if node.right:
  95.                 stack.append(node.right)
  96.         return pocet
  97.  
  98.     def tree_height(self):
  99.         def height_rek(node):
  100.             if node is None or node.left is None and node.right is None:
  101.                 return 0
  102.             lavy = height_rek(node.left)
  103.             pravy = height_rek(node.right)
  104.             return 1 + max(lavy, pravy)
  105.         if self.root is None:
  106.             return -1
  107.         return height_rek(self.root)
  108.  
  109. def pq_sort(pole):
  110.     pq = PriorityQueue()
  111.     for key, value in pole:
  112.         pq.add(key, value)
  113.     for i in range(len(pole)):
  114.         pole[i] = pq.remove_min()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement