def __insert(node, value, priority=None): if node is None: return TreapNode(value, priority) if node.value < value: node.right = MutableTreap.__insert(node.right, value, priority) if node.right.priority > node.priority: node = Treap.__rotateLeft(node) else: node.left = MutableTreap.__insert(node.left, value, priority) if node.left.priority > node.priority: node = Treap.__rotateRight(node) return node
def __delete(node, value): if node.left is None and node.right is None: node = None elif node.value > value: node.left = MutableTreap.__delete(node.left, value) elif node.value < value: node.right = MutableTreap.__delete(node.right, value) elif Treap.cmp(node.left, node.right) > 0: node = Treap.__rotateLeft(node) node.left = MutableTreap.__delete(node.left, value) else: node = Treap.__rotateRight(node) node.right = MutableTreap.__delete(node.right, value) return node
def __delete(node, value): if node.left is None and node.right is None: return None new = TreapNode(node=node) if node.value > value: new.left = ImmutableTreap.__delete(new.left, value) elif node.value < value: new.right = ImmutableTreap.__delete(new.right, value) elif Treap.cmp(node.left, node.right) > 0: new.right = TreapNode(node=new.right) new = Treap.__rotateLeft(new) new.left = ImmutableTreap.__delete(new.left, value) else: new.left = TreapNode(node=new.left) new = Treap.__rotateRight(new) new.right = ImmutableTreap.__delete(new.right, value) return new