//请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
//
// 例如,二叉树 [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)