/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
 
 //递归检查是否对称
bool check(struct TreeNode* rchild,struct TreeNode* lchild){
    
    //如果right是空,则left也空才是对称,否则不对称
    if(rchild==NULL){
        if(lchild==NULL){
            return 1;
        }else{
            return 0;
        }
    }
    
    //如果left是空,则right也空才是对称,否则不对称
    if(lchild==NULL){
        if(rchild==NULL){
            return 1;
        }else{
            return 0;
        }
    }
    
    //如果right和left都不是空且他们两个值相等,递归比较
    if(rchild->val==lchild->val){
        //比较右儿子的右与左儿子的左,和,右儿子的左与左儿子的右是不是对称
        return check(rchild->right,lchild->left) && check(rchild->left,lchild->right);
    }
    
    return 0;//如果right和left的值不相等,则不对称

}

bool isSymmetrical(struct TreeNode* pRoot ) {
    // 空树是对称树
    if(pRoot==NULL){
        return 1;
    }
    return check(pRoot->right,pRoot->left);
}