LeetCode第 101 题:对称二叉树(C++)

101. 对称二叉树 - 力扣(LeetCode)

第一遍是想中序遍历,但是这个例子卡住了:

[1,2,2,2,null,2]

那就老老实实写递归吧:

左右子树相等的时候,需要左子树的左边 == 右子树的右边,左子树的右边 == 右子树的左边。

递归判断。

class Solution {
public:
    bool isMirror(TreeNode *p, TreeNode *q){
        if(!p && !q) return true;
        if(!p || !q) return false;
        if(p->val == q->val) return isMirror(p->left, q->right) && isMirror(p->right, q->left);
        return false;//p->val != q->val
    }
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        return isMirror(root->left, root->right);
    }
};

如果要使用迭代的话,需要借助外部容器,比如queue:


public:
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        queue<TreeNode*> my_q;
        my_q.push(root->left);
        my_q.push(root->right);
        while(!my_q.empty()){
            auto p = my_q.front(); my_q.pop();
            auto q = my_q.front(); my_q.pop();
            if(!p && !q) continue;
            if(!p || !q) return false;
            if(p->val != q->val) return false;
            my_q.push(p->left);
            my_q.push(q->right);
            my_q.push(p->right);
            my_q.push(q->left);
        }
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_32523711/article/details/107881908