leetcode 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1
/
2 2
/ \ /
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1
/
2 2
\
3 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree
思路:利用中序遍历的同时去判断(非递归版

非递归版

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(!root)return true;
        stack<TreeNode*> stk1;
        stack<TreeNode*> stk2;
        auto p=root;
        auto q=root;
        while(p||q||stk1.size()||stk2.size()){
            while(p&&q){
                stk1.push(p);
                stk2.push(q);
                p=p->left;
                q=q->right;
            }
            if(p||q){
                return false;
            }
            p=stk1.top();
            q=stk2.top();
            stk1.pop();
            stk2.pop();
            if(p->val!=q->val)return false;
            p=p->right;
            q=q->left;
        }
        return true;
    }
};

递归版


class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(!root)return true;
        return dfs(root->left,root->right);
    }
    bool dfs(TreeNode* l,TreeNode* r){
        if(!l||!r)return !l&&!r; 
        if(l->val!=r->val)return false;
        return dfs(l->left,r->right)&&dfs(l->right,r->left);
    }
};
posted @ 2019-08-02 19:56  BurningShy  阅读(95)  评论(0编辑  收藏  举报