bool isBalancedUtil(TreeNode* root) {
     if (!root) return true;
     int left = getHeight(root->left);
     int right = getHeight(root->right);
    
     if (abs(left-right) <=1 && isBalancedUtil(root->left) && isBalancedUtil(root->right)) 
         return true;
     return false;
 }
	int isBalancedUtil(TreeNode *node, bool &bal){
		if(!node)return 0;
		if(!bal)return -1;
		if(!node->left && !node->right)return 1;
		int left = isBalancedUtil(node->left, bal);
		int right = isBalancedUtil(node->right, bal);
		if(abs(left-right)>1){
			bal = false;
			return -1;
		}
		return max(left, right)+1;
	}
 bool isBalanced(TreeNode *root) {
     return isBalancedUtil(root);
 }
     bool isBalanced(TreeNode *root) {
        bool bal = true;
		isBalancedUtil(root, bal);
		return bal;
    }