leetcode hot100刷题日记——27.对称二叉树

leetcode hot100刷题日记——27.对称二叉树_第1张图片

方法一:递归法

class Solution {
public:
    bool check(TreeNode *left,TreeNode *right){
    	//左子树和右子树的节点同时是空的是对称的
        if(left==nullptr&&right==nullptr){
            return true;
        }
        if(left==nullptr||right==nullptr){
            return false;
        }
        //检查左右子树的值相不相等,再检查左子树的左节点是不是和右子树的右节点相同,左子树的右节点是不是和右子树的左节点相同
        return left->val==right->val&&check(left->left,right->right)&&check(left->right,right->left);
    }
    bool isSymmetric(TreeNode* root) {
        return check(root->left,root->right);
    }
};

时间复杂度:O(n)
空间复杂度:O(n)

方法二:迭代法,用队列

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);
    }
};

时间复杂度:O(n)
空间复杂度:O(n)

你可能感兴趣的:(力扣刷题专栏,leetcode,算法,职场和发展)