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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
    bool isSame(TreeNode* left, TreeNode* right) {
        // 如果两个都是空
        if(!left && !right) {
            return true;
        }
        // 一个空,一个不是空
        if (!left || !right) {
            return false;
        }
        // 两个值不同
        if (left->val != right->val) {
            return false;
        }
        return isSame(left->left, right->right) && isSame(left->right, right->left);
        // (left->left, right->right) && (left->right, right->left)
    }
    bool isSymmetric(TreeNode* root) {
        // 如果是空梳子,true
        if (!root) {
            return true;
        }
        // 如果是叶子节点
        if (!root->left && !root->right) {
            return true;
        }
        // 如果有左无右,或有右无左, false
        if (!root->left || !root->right) {
            return false;
        }
        // 如果左右不相等,false
        return isSame(root->left, root->right);
        // 递归
        // write code here
    }
};