Example #1
0
 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)