Leetcode 101 对称二叉树 C++

本文介绍两种高效判断二叉树是否对称的方法:递归法与迭代法。递归法通过比较对称节点的左右子节点实现,迭代法则利用队列存储左右子树节点并按对称顺序比较。

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

方法一:递归法
思路: 对某两个对称节点n1(左),n2(右),我们只需要比较n1的左节点和n2的右节点,n1的右节点和n2的左节点,是否相等即可。然后一直递归调用即可。

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

方法二:迭代法
思路:借助两个队列queue来分别存储root的左右子树中的以每个节点为根的子树,然后按照对称的顺序逐个放入队列末尾,并从队列前取出一个进行比较。


class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        queue<TreeNode*> q1,q2;
        if(!root) return true;
        q1.push(root->left);
        q2.push(root->right);
        while(!q1.empty()&&!q2.empty())
        {
            TreeNode* node1=q1.front();q1.pop();
            TreeNode* node2=q2.front();q2.pop();
            if(!node1&&!node2) continue;
            if((!node1&&node2)||(node1&&!node2)||(node1->val!=node2->val)) return false;
            q1.push(node1->left);
            q1.push(node1->right);
            q2.push(node2->right);
            q2.push(node2->left);
        }
        return true;
    
    }
    
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值