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])
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)