给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
// 迭代
class Solution {
public:
bool check(TreeNode* q, TreeNode* p) {
queue<TreeNode*> qq;
if(q == nullptr && p == nullptr) return true;
if((q == nullptr || p == nullptr) || q->val != p->val) return false;
qq.push(q), qq.push(p);
while(!qq.empty()) {
q = qq.front(); qq.pop();
p = qq.front(); qq.pop();
if(q == nullptr && p == nullptr) continue;
if((q == nullptr || p == nullptr) || q->val != p->val) return false;
qq.push(q->left), qq.push(p->right);
qq.push(q->right), qq.push(p->left);
}
return true;
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};
// 递归
class Solution {
public:
bool check(TreeNode* p, TreeNode* q) {
if(p == nullptr && q == nullptr) return true;
if(p == nullptr || q == nullptr) return false;
return (p->val == q->val) && check(p->left, q->right) && check(p->right, q->left);
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};