def rotate_left(self, old_root: BinaryTreeNode): new_root = old_root.right # 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 right old_root.set_right(new_root.left) # 3.change new_root's left new_root.set_left(old_root) # 4.update two node's size old_root.update_size() new_root.update_size() # 5.change balance factor old_root.balance_factor = old_root.balance_factor + 1 - min(0, new_root.balance_factor) new_root.balance_factor = new_root.balance_factor + 1 + max(0, old_root.balance_factor)
def rotate_left(self, old_root: BinaryTreeNode): new_root = old_root.right # 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 right old_root.set_right(new_root.left) # 3.change new root's left new_root.set_left(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