[思维]LeetCode:101.对称二叉树

文章介绍了如何使用递归解决LeetCode上的101题,即判断一个二叉树是否是对称的。主要思路是从根节点开始,通过比较左右子树的对称性和节点值来确定。代码中定义了一个`check`函数,检查两个子树是否对称,并在主函数`isSymmetric`中调用,以根节点作为起点进行自我比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:101. 对称二叉树 - 力扣(Leetcode)

 ps:这应该算作中等题吧?(可能是我太菜了....学不会的递归...啊吧啊吧..qwq)

树的问题,一般可以采用递归的方法来做。因此我们采用递归

题目分析:我们得分为两步解决这个问题:1:是否对称       2:是否对应值相等 

1:是否对称:在递归的途中,因为要判断是否具有对称性,因此,我们从根开始递归。

如何判断对称性呢?根据样例一可以发现:图解

2:是否对应值相同:这个很简单,只需要:p->val==q->val

由以上可写得代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool check(TreeNode*p,TreeNode*q){
        if(!p&&!q) return true;
        if(!p||!q) return false;
        if(p->val==q->val&&check(p->left,q->right)&&check(p->right,q->left)) return true;
        return false;
    }

    bool isSymmetric(TreeNode* root) {
        if(root==nullptr) return true;
        return check(root, root);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值