leetcode 101 对称二叉树

本文探讨了如何高效判断一棵二叉树是否对称。通过对比左子树和右子树的结构,提出了一种递归算法实现对称性检测,避免了冗余的遍历过程,提高了算法效率。

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

错误代码:
class Solution {
public:
     vector<int> xian(TreeNode* root,vector<int> a)
    {
        if(root->left!=NULL)
            a=xian(root->left,a);
         if(root->left==NULL && root->right!=NULL)
             a.push_back(-1);
          int i=root->val;
        a.push_back(i);
        if(root->right!=NULL)
            a=xian(root->right,a);
         if(root->right==NULL && root->left!=NULL)
             a.push_back(-1);
        return a;
    }
    bool isSymmetric(TreeNode* root) {
        if ( root==NULL) return true;
        if((root->left==NULL)&&(root->right==NULL)) return true;
  //先序遍历
    vector<int> a;
      a=xian(root,a);
      int num=a.size()/2;
    int i=0;
        for(i=0;i<num;i++)
        {
            if(a.at(i)==a.at(a.size()-i-1))
                continue;
            else
                return false;
        }
    return true;
    }
};

这样的状况对于 5 4 1 null 1 null 4 2 null 2 null是不行的,得到的是-1 4 2 1 -1 5 -1 1 2 4 1

最开始想到了结果方法,但是觉得太蠢了的感觉久没有那么做。发现,是我蠢了

争取方法:想要看树是否对称。其实就是看这个树的左中右是否等于右中左。 

换句话说,我们同时看他的左边和右边,遍历一遍就可以了

class Solution {
public:
    bool xian(TreeNode* root1,TreeNode* root2)
    {
         if(root1==NULL && root2==NULL)
             return true;
        if (root1!=NULL&&root2!=NULL&&root1->val==root2->val)
            return xian(root1->left,root2->right)&&xian(root1->right,root2->left);
            else return false;
    }
    bool isSymmetric(TreeNode* root) {
    return xian(root,root);
    }  
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值