题目如下
解题思路
还是继续认识树,和相同的树很相似,在这里我们给出两种解题方法,第一种是和相同的树解法一样的递归,第二种是迭代法
递归法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
bool check(TreeNode* q,TreeNode* p){
if(!q&&!p) return true;
else if(!q||!p) return false;
return q->val==p->val&&check(q->left,p->right)&&check(q->right,p->left);
}
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return check(root,root);
}
};
迭代法
/**
* 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 check(TreeNode *u, TreeNode *v) {
queue <TreeNode*> q;
q.push(u); q.push(v);
while (!q.empty()) {
u = q.front(); q.pop();
v = q.front(); q.pop();
if (!u && !v) continue;
if ((!u || !v) || (u->val != v->val)) return false;
q.push(u->left);
q.push(v->right);
q.push(u->right);
q.push(v->left);
}
return true;
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
};