Beispiel #1
0
 def __init__(self, list, satellite = None):
     list2 = []
     if satellite == None:
         for i in list:
             list2.append([i, [0]])
     else:
         for i in list:
             list2.append([i[0],[0,[i[1]]]])
     self.satellite = satellite
     self.null_node = RedBlackTree.Node(None)
     self.null_node.color = "BLACK"
     self.null_node.satellite_data = [0]
     self.root = self.null_node
     for i in list2:
         self.insert(i[0],i[1])
Beispiel #2
0
 def insert(self, value, satellite_data):
     """insert an element and remain the properties of red black tree"""
     insert_node = RedBlackTree.Node(value,satellite_data)
     current_node = self.root
     last_node = None
     left_right = 0  #to indicate which child the new node should insert in
     while current_node != self.null_node:
         if value <= current_node.key:
             last_node = current_node
             current_node = current_node.left
             left_right = 0
         else:
             last_node = current_node
             current_node = current_node.right
             left_right = 1
     if last_node == None:
         self.root = insert_node
         insert_node.parent = self.null_node
         insert_node.left = self.null_node
         insert_node.right = self.null_node
     else:
         if left_right == 0:
             last_node.left = insert_node
             insert_node.parent = last_node
             insert_node.left = self.null_node
             insert_node.right = self.null_node
         else:
             last_node.right = insert_node
             insert_node.parent = last_node
             insert_node.right = self.null_node
             insert_node.left = self.null_node
     original_insert = insert_node
     while insert_node != self.null_node:
         insert_node.satellite_data[0] += 1
         insert_node = insert_node.parent
     self.insert_fixup(original_insert)