def _updateBalanceFactor(self, node: TreeNode): oldBalanceFactor: int = node.balanceFactor if node.leftChild is None: node.leftSubtreeHeight = 0 else: node.leftSubtreeHeight = max(node.leftChild.leftSubtreeHeight, node.leftChild.rightSubtreeHeight) + 1 if node.rightChild is None: node.rightSubtreeHeight = 0 else: node.rightSubtreeHeight = max( node.rightChild.leftSubtreeHeight, node.rightChild.rightSubtreeHeight) + 1 node.balanceFactor = node.leftSubtreeHeight - node.rightSubtreeHeight if node.balanceFactor < -1 or node.balanceFactor > 1: self._rebalance(node) return if node.balanceFactor != oldBalanceFactor and node.hasParent(): self._updateBalanceFactor(node.parent)