def __init__(self, value, left, right, parent): self.value = value # associated line segment self.left = left self.right = right self.parent = parent self.m = None if value is not None: self.m = helper.get_slope(value)
def insert(self, key, s): if self.root.value is None: self.root.left = Node(s, None, None, self.root) self.root.value = s self.root.m = helper.get_slope(s) else: (node, path) = self.root.find_insert_pt(key, s) if path == 'r': node.right = Node(s, None, None, node) node.right.adjust() elif path == 'l': node.left = Node(s, None, None, node) else: # this means matching Node was a leaf # need to make a new internal Node c = node.compare_to_key(key) if ((c < 0) or (c == 0 and node.compare_lower(key, s) < 1)): new_internal = Node(s, None, node, node.parent) new_leaf = Node(s, None, None, new_internal) new_internal.left = new_leaf if node is node.parent.left: node.parent.left = new_internal node.adjust() else: node.parent.right = new_internal else: new_internal = Node(node.value, node, None, node.parent) new_leaf = Node(s, None, None, new_internal) new_internal.right = new_leaf if node is node.parent.left: node.parent.left = new_internal new_leaf.adjust() else: node.parent.right = new_internal node.parent = new_internal