def re_balance(self):
self.update_heights(recursive=False)<EOL>self.update_balances(False)<EOL>while self.balance < -<NUM_LIT:1> or self.balance > <NUM_LIT:1>:<EOL><INDENT>if self.balance > <NUM_LIT:1>:<EOL><INDENT>if self.node.left.balance < <NUM_LIT:0>:<EOL><INDENT>self.node.left.rotate_left()<EOL>self.update_heights()<EOL>self.update_balances()<EOL><DEDENT>self.rotate_right()<EOL>self.update_heights()<EOL>self.update_balances()<EOL><DEDENT>if self.balance < -<NUM_LIT:1>:<EOL><INDENT>if self.node.right.balance > <NUM_LIT:0>:<EOL><INDENT>self.node.right.rotate_right()<EOL>self.update_heights()<EOL>self.update_balances()<EOL><DEDENT>self.rotate_left()<EOL>self.update_heights()<EOL>self.update_balances()<EOL><DEDENT><DEDENT>
Re balance tree. After inserting or deleting a node,