def is_balanced(node):
    """Check if a BST is balanced; returns (True/False, height of tree)."""
    # First we ensure the left subtree is balanced; then ensure the right subtree 
    # is balanced too; and ensure the diff betw heights of left & right subtree <=1
    if node is None:
        return True, 0
    balanced_l, height_l = is_balanced(node.left)
    balanced_r, height_r = is_balanced(node.right)
    balanced = balanced_l and balanced_r and abs(height_l - height_r) <= 1
    height = 1 + max(height_l, height_r)
    return balanced, height