/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

/**
 * 
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
int Balanced(struct TreeNode* pRoot){
    int left=1,right=1;
    if(pRoot){
        left+=Balanced(pRoot->left);
        right+=Balanced(pRoot->right);
        return left>right?left:right;
    }
    return 0;
}

bool IsBalanced_Solution(struct TreeNode* pRoot ) {
    // write code here
    int left=0,right=0;
    if(pRoot==NULL)
    return true;
    else{
        left=Balanced(pRoot->left);
        right=Balanced(pRoot->right);
        if(abs(left-right)>1)return false;
    } 
    return true&&IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);
}