/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @author Senky
 * @date 2023.08.01
 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
#include <stdbool.h>

// Helper function to check if two trees are mirrors
bool isMirror(struct TreeNode* leftTree, struct TreeNode* rightTree) 
{
    if (leftTree == NULL && rightTree == NULL) 
    {
        //无孩子
        return true;
    }
    if (leftTree == NULL || rightTree == NULL) 
    {
        //只有一个孩子
        return false;
    }

    return (leftTree->val == rightTree->val) &&       //left和right结点的值相等
        isMirror(leftTree->left, rightTree->right) && //left左和right右比较
        isMirror(leftTree->right, rightTree->left);   //left右和right左比较
}

bool isSymmetrical(struct TreeNode* pRoot) 
{
    //根结点空为true
    if (pRoot == NULL) {
        return true;
    }

    return isMirror(pRoot->left, pRoot->right);
}