//请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 
//
// 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 
//
// 1 
// / \ 
// 2 2 
// / \ / \ 
//3 4 4 3 
//但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 
//
// 1 
// / \ 
// 2 2 
// \ \ 
// 3 3 
//
// 
//
// 示例 1: 
//
// 输入:root = [1,2,2,3,4,4,3]
//输出:true
// 
//
// 示例 2: 
//
// 输入:root = [1,2,2,null,3,null,3]
//输出:false 
//
// 
//
// 限制: 
//
// 0 <= 节点个数 <= 1000 
//
// 注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/ 
// Related Topics 树 
// 👍 130 👎 0

/*
* 剑指 Offer 28 对称的二叉树
* 2021-02-18 11:35:51
* @author oxygenbytes
*/ 
#include "leetcode.h" 
//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        return symmetric(root->left, root->right);
    }
    bool symmetric(TreeNode* l, TreeNode* r){
        if(!l && !r) return true;
        if(!l || !r) return false;
        if(l->val != r->val) return false;
        return symmetric(l->left, r->right) && symmetric(l->right, r->left);
    }
};

//leetcode submit region end(Prohibit modification and deletion)