递归法
class Solution {
public:
bool compare(TreeNode* left,TreeNode* right){
if(left==nullptr&&right!=nullptr) return false;
else if(left!=nullptr&&right==nullptr) return false;
else if(left==nullptr&&right==nullptr) return true;
else if(left->val!=right->val) return false;
else
return compare(left->right,right->left)&&compare(left->left,right->right);
}
bool isSymmetric(TreeNode* root) {
if(root==nullptr) return true;
return compare(root->left,root->right);
}
};
迭代法
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==nullptr) return true;
queue<TreeNode*> que;
que.push(root->left);
que.push(root->right);
while(!que.empty()){
TreeNode* leftNode=que.front();que.pop();
TreeNode* rightNode=que.front();que.pop();
if(!leftNode&&!rightNode){
continue;
}
if(!leftNode||!rightNode||(leftNode->val!=rightNode->val)){
return false;
}
que.push(leftNode->left);
que.push(rightNode->right);
que.push(leftNode->right);
que.push(rightNode->left);
}
return true;
}
};