递归判断一下
节点如下:
a
b c
d e f g

     a的左子树值要等于a的右子树c

b的左子树要等于c的子树 b的右子树要等于c的左子树

以此循环下去
函数如下:

bool check(TreeNode * left,TreeNode * right)
    {
        //左右都为空可以判为对称,左右单个为空肯定就不对称了,都不为空就回调
        if(left == nullptr )
        {
            if(right == nullptr)
                return true;
            else
                return false;
        }
        else{
            if(right == nullptr)
                return false;
        }
        if(left->val==right->val)
            return(check(left->left,right->right)&&check(left->right, right->left));
        else
            return false;
    }

完整代码

class Solution {
public:

    bool check(TreeNode * left,TreeNode * right)
    {
        //左右都为空可以判为对称,左右单个为空肯定就不对称了,都不为空就回调
        if(left == nullptr )
        {
            if(right == nullptr)
                return true;
            else
                return false;
        }
        else{
            if(right == nullptr)
                return false;
        }
        if(left->val==right->val)
            return(check(left->left,right->right)&&check(left->right, right->left));
        else
            return false;
    }


    bool isSymmetrical(TreeNode* pRoot) {

        if(pRoot == nullptr)
            return true;
        TreeNode * left=pRoot->left;
        TreeNode * right=pRoot->right;
        return check(left, right);
    }

};