def test(args=None): bst.test(args, BSTtype=AVL)
if x.left: y.right.father = x y.right = x x.father = y update_height(x) update_height(y) def insert(self, key): node = bst.BST.insert(self, key) self.rebalance(node) def delete(self, key): node = bst.BST.delete(self, key) self.rebalance(node.father) def rebalance(self, node): while node: update_height(node) if height(node.left) == height(node.right) - 2: if height(node.right.right) == height(node.left): self.right_rotate(node.right) self.left_rotate(node) elif height(node.right) == height(node.left) - 2: if height(node.left.left) == height(node.right): self.left_rotate(node.left) self.right_rotate(node) node = node.father if __name__ == "__main__": bst.test(None, AVL)
def test(args=None): bst.test(args, BSTtype=BST)
y.right.father = x y.right = x x.father = y update_height(x) update_height(y) def insert(self, key): node = bst.BST.insert(self, key) self.rebalance(node) def delete(self, key): node = bst.BST.delete(self, key) self.rebalance(node.father) def rebalance(self, node): while node: update_height(node) if height(node.left) == height(node.right) - 2: if height(node.right.right) == height(node.left): self.right_rotate(node.right) self.left_rotate(node) elif height(node.right) == height(node.left) - 2: if height(node.left.left) == height(node.right): self.left_rotate(node.left) self.right_rotate(node) node = node.father if __name__ == "__main__": bst.test(None, AVL)