1、队列法
将节点按照镜像顺序放入队列,弹出比较。
时间复杂度:O(N),空间复杂度O(N)
class Solution {
public:
queue<TreeNode*> comque;
bool isSymmetric(TreeNode* root) {
if(!root) return true;
comque.push(root->left);
comque.push(root->right);
while(!comque.empty()){
auto nodeleft = comque.front();
comque.pop();
auto noderight = comque.front();
comque.pop();
if(nodeleft==NULL&&noderight==NULL) continue;
if(!noderight||!nodeleft) return false;
if(nodeleft->val!=noderight->val) return false;
comque.push(nodeleft->left);
comque.push(noderight->right);
comque.push(nodeleft->right);
comque.push(noderight->left);
}
return true;
}
};
2、递归
时间复杂度:O(N),空间复杂度O(N)
对称:①根节点值相等
②r1左子树与r2右子树镜像对称;r1右子树与r2左子树镜像对称;
class Solution {
public:
bool ismirro(TreeNode* root1,TreeNode* root2){
if(!root1&&!root2) return true;
if(!root1||!root2) return false;
if(root1->val!=root2->val) return false;
return ismirro(root1->left,root2->right)&&ismirro(root1->right,root2->left);
}
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return ismirro(root->left,root->right);
}
};