Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.09 KB | None | 0 0
  1. class Node:
  2.  
  3.     def __init__(self, value):
  4.         self.left = None
  5.         self.right = None
  6.         self.value = value
  7.  
  8.     def set_left(self, node):
  9.         self.left = node
  10.  
  11.     def set_right(self, node):
  12.         self.right = node
  13.  
  14.     def set_value(self, value):
  15.         self.value = value
  16.  
  17.     def get_left(self):
  18.         return self.left
  19.  
  20.     def get_right(self):
  21.         return self.right
  22.  
  23.     def get_value(self):
  24.         return self.value
  25.  
  26.  
  27. class Tree:
  28.  
  29.     def __init__(self):
  30.         self.root = None
  31.  
  32.     def insert(self, root, value):
  33.  
  34.         node = Node(value)
  35.  
  36.         if self.root is None:
  37.             self.root = node
  38.             return True
  39.  
  40.         if value <= root.get_value():
  41.             if root.get_left():
  42.                 return self.insert(root.get_left(), value)
  43.             return root.set_left(node)
  44.  
  45.         if value > root.get_value():
  46.             if root.get_right():
  47.                 return self.insert(root.get_right(), value)
  48.             return root.set_right(node)
  49.  
  50.     def print(self, root):
  51.         if self.root is None:
  52.             return False
  53.         if root.get_left():
  54.             self.print(root.get_left())
  55.         if root.get_value():
  56.             print(root.get_value())
  57.         if root.get_right():
  58.             self.print(root.get_right())
  59.  
  60.     def get_root(self):
  61.         return self.root
  62.  
  63.     def search(self, root, value):
  64.  
  65.         if root is not None:
  66.             if value == root.get_value():
  67.                 return root
  68.             if value < root.get_value():
  69.                 return self.search(root.get_left(), value)
  70.             if value > root.get_value():
  71.                 return self.search(root.get_right(), value)
  72.  
  73.         else:
  74.             return False
  75.  
  76.     def maximum(self, root):
  77.  
  78.         if root.get_right():
  79.             return self.maximum(root.get_right())
  80.         return root
  81.  
  82.     def minimum(self, root):
  83.  
  84.         if root.get_left():
  85.             return self.minimum(root.get_left())
  86.         return root
  87.  
  88.     def predecessor(self, root, value):
  89.  
  90.         root = self.search(root, value)
  91.         if root:
  92.             if root.get_left():
  93.                 return self.maximum(root.get_left())
  94.         return False
  95.  
  96.     def successor(self, root, value):
  97.  
  98.         root = self.search(root, value)
  99.         if root:
  100.             if root.get_right():
  101.                 return self.minimum(root.get_right())
  102.         return False
  103.  
  104.     def get_dad(self, root, value):
  105.         if root is not None:
  106.             if (root.get_left() and root.get_left().get_value() == value) or (root.get_right() and root.get_right().get_value() == value):
  107.                 return root
  108.             elif root.get_left() and value < root.get_value():
  109.                 return self.get_dad(root.get_left(), value)
  110.             elif root.get_right() and value > root.get_value():
  111.                 return self.get_dad(root.get_right())
  112.         return False
  113.  
  114.     def delete(self, root, value):
  115.  
  116.         if root is None:
  117.             return False
  118.  
  119.         el = self.search(root, value)
  120.  
  121.         if el:
  122.             if el.get_right():
  123.                 successor = self.successor(root, value)
  124.                 self.get_dad(el, successor.get_value()).set_right(None)
  125.                 el.value = successor.get_value()
  126.             elif el.get_left():
  127.                 predecessor = self.predecessor(root, value)
  128.                 self.get_dad(el, predecessor.get_value()).set_left(None)
  129.                 el.value = predecessor.get_value()
  130.             elif el.get_right() is None and el.get_left():
  131.                 dad = el.get_dad()
  132.                 if el.get_value() > dad.get_value():
  133.                     dad.set_right(None)
  134.                 else:
  135.                     dad.set_left(None)
  136.             return True
  137.         return False
  138.  
  139.  
  140. if __name__ == '__main__':
  141.  
  142.     tree = Tree()
  143.     tree.insert(tree.root, 10)
  144.     tree.insert(tree.root, 8)
  145.     tree.insert(tree.root, 15)
  146.     tree.insert(tree.root, 5)
  147.     tree.insert(tree.root, 2)
  148.     tree.insert(tree.root, 6)
  149.     tree.delete(tree.get_root(), 8)
  150.     tree.print(tree.get_root())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement