on solution return 0 if unbalanced else depth 1 def isbalancedroot on2 solution left maxheightroot left right maxheightroot right return absleftright 1 and isbalancedroot left and isbalancedroot right def maxheightroot if root is none return 0 return maxmaxheightroot left maxheightroot right 1 o n solution return 0 if unbalanced else depth 1 def is_balanced root o n 2 solution left max_height root left right max_height root right return abs left right 1 and is_balanced root left and is_balanced root right def max_height root if root is none return 0 return max max_height root left max_height root right 1
def is_balanced(root):
    return __is_balanced_recursive(root)


def __is_balanced_recursive(root):
    
    return -1 != __get_depth(root)


def __get_depth(root):
    
    if root is None:
        return 0
    left = __get_depth(root.left)
    right = __get_depth(root.right)
    if abs(left-right) > 1 or -1 in [left, right]:
        return -1
    return 1 + max(left, right)