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 @   鸭子船长  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2016-03-16 mediaplayer与surfaceView,无法播放问题
点击右上角即可分享
微信分享提示