Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.62 KB | None | 0 0
  1. class Node:
  2.     def __init__(self, data=None):
  3.         self.parent = None
  4.         self.left = None
  5.         self.right = None
  6.         self.data = data
  7.  
  8.     def insert(self, data):
  9.         if self.data:
  10.             if data < self.data:
  11.                 if self.left is None:
  12.                     self.left = Node(data)
  13.                     self.left.parent = self
  14.                 else:
  15.                     self.left.insert(data)
  16.  
  17.             elif data > self.data:
  18.                 if self.right is None:
  19.                     self.right = Node(data)
  20.                     self.right.parent = self
  21.                 else:
  22.                     self.right.insert(data)
  23.         else:
  24.             self.data = data
  25.  
  26.     def delete(self, data):
  27.         if self.data:
  28.             if data < self.data:
  29.                 self.left.delete(data)
  30.             elif data > self.data:
  31.                 self.right.delete(data)
  32.             else:
  33.                 if self.left == None and self.right == None:  #Blatt
  34.                     if self.parent.left.data == data:
  35.                         self.parent.left = None
  36.                     else:
  37.                         self.parent.right = None
  38.                 elif self.left == None or self.right == None:  #1 kind
  39.                     if self.left == None:
  40.                         self.data = self.right.data
  41.                         self.right = self.right.right
  42.                     else:
  43.                         self.data = self.left.data
  44.                         self.left = self.left.left
  45.                 else:  # 2 Dreckskinder
  46.                     right_min = self.right
  47.                     while not right_min.left is None:
  48.                         right_min = right_min.left
  49.                     self.data = right_min.data
  50.                     right_min.delete(right_min.data)
  51.  
  52.     def printTree(self):
  53.         if self.left:
  54.             self.left.printTree()
  55.         print(self.data),
  56.         if self.right:
  57.             self.right.printTree()
  58.  
  59.  
  60. class Tree:
  61.     def __init__(self):
  62.         self.root = Node()
  63.  
  64.     def insert(self, data):
  65.         self.root.insert(data)
  66.  
  67.     def delete(self, data):
  68.         self.root.delete(data)
  69.  
  70.     def left_rotate(self, x):
  71.         y = x.right
  72.         if x:
  73.             y.parent = x.parent
  74.             if y.parent is None:
  75.                 self.root = y
  76.             else:
  77.                 if y.parent.left is x:
  78.                     y.parent.left = y
  79.                 elif y.parent.right is x:
  80.                     y.parent.right = y
  81.             x.right = y.left
  82.             if x.right is not None:
  83.                 x.right.parent = x
  84.             y.left = x
  85.             x.parent = y
  86.  
  87.     def right_rotate(self, x):
  88.         y = x.left
  89.         if y:
  90.             y.parent = x.parent
  91.             if y.parent is None:
  92.                 self.root = y
  93.             else:
  94.                 if y.parent.left is x:
  95.                     y.parent.left = y
  96.                 elif y.parent.right is x:
  97.                     y.parent.right = y
  98.             x.left = y.right
  99.             if x.left is not None:
  100.                 x.left.parent = x
  101.             y.right = x
  102.             x.parent = y
  103.  
  104.     def double_left_rotation(self, x):
  105.         self.right_rotate(x)
  106.         self.left_rotate(x.left)
  107.  
  108.     def double_right_rotation(self, x):
  109.         self.left_rotate(x)
  110.         self.right_rotate(x.right)
  111.  
  112.     def printTree(self):
  113.         self.root.printTree()
  114.  
  115.  
  116. tree = Tree()
  117. tree.insert(42)
  118. tree.insert(16)
  119. tree.insert(25)
  120. tree.insert(58)
  121. tree.insert(49)
  122. tree.insert(60)
  123. tree.insert(8)
  124.  
  125. tree.printTree()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement