Leetcode 101. 对称二叉树 简单

101. 对称二叉树

题目:

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

 

思路1:

递归,根节点的左右子树相同,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可

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

思路2:

非递归。往栈中放入left和right

而后成对放入left->left&right->right 和 left->right&right->left

每次取出两个对比

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root==nullptr)
            return true;
        stack<TreeNode*> stk;
        stk.push(root->left);
        stk.push(root->right);
        while(!stk.empty()){
            TreeNode* left=stk.top();
            stk.pop();
            TreeNode* right=stk.top();
            stk.pop();
            if(left==nullptr&&right==nullptr)
                continue;
            if(left==nullptr||right==nullptr)
                return false;
            if(left->val!=right->val)
                return false;
            stk.push(left->left);
            stk.push(right->right);
            stk.push(left->right);
            stk.push(right->left);
        }
        return true;
    }
    
};

 

posted @ 2022-03-16 16:32  鸭子船长  阅读(35)  评论(0)    收藏  举报