def rotate_right(self, old_root: BinaryTreeNode): new_root = old_root.left # 1.change upper relationships. if old_root.is_root(): self.set_root(new_root) else: old_root.parent.set_child(new_root) # 2.change old_root's left old_root.set_left(new_root.right) # 3.change new root's right new_root.set_right(old_root) # 4.update color new_root.color = old_root.color old_root.color = RED # 5.update size old_root.update_size() new_root.update_size() return new_root
def flip_colors(self, node: BinaryTreeNode): if self.is_red(node.left) and self.is_red(node.right): node.left.color = BLACK node.right.color = BLACK if not node.is_root(): node.color = RED