101. 对称二叉树

题解

这题意思明了,遍历左右节点,观察他们是否镜像对称即可

递归新的形式

在之前,我们遍历二叉树都是void 返回值

但是这题开始 题目要求我们返回true false

所以不能再是void 我们需要根据递归过程 检验是否符合题意

所以开头我们的 递归定义不同了

定义函数头

bool travelNode(TreeNode* left,TreeNode* right);

定义递归结束

首先不变的是 在递归函数开始 我们依旧要开始写 递归直接结束的情况

  if(left!=nullptr&&right==nullptr)return false;
        else if(left==nullptr&&right!=nullptr)return false;
        else if(left==nullptr&&right==nullptr)return true;
        else if(left->val!=right->val)return false;

递归逻辑

在满足开头后 我们就要开始写函数的主题

遍历二叉树结点 那么我们就要递归

travelnode(left->left,right->right);
travelnode(left->right,right->left);

但是我们要想 在最后的递归结束 我们需要返回bool  问题是这个bool如何传递呢

在递归过程中 如果检查到false 那么就需要一遍一遍的传递上来

将bool传递给第一个递归后结束递归 然后返回主程序

问题就是这个

bool left = travelnode(left->left,right->right);
      bool right =   travelnode(left->right,right->left);

我们可以简单的想 在递归题目 千万不要去人脑模拟递归 人脑肯定会stack overflow的 哪怕只有3次递归

我们想 在我们的第一个递归执行完毕 left right 都接受到了 返回主函数

如果left 或者right 有一个是false  那么说明 递归的过程中 又不符合题目的

所以 我们还需要return 一下

就是

return left&&right

    bool travelnode(TreeNode* left ,TreeNode* right){
        if(left!=nullptr&&right==nullptr)return false;
        else if(left==nullptr&&right!=nullptr)return false;
        else if(left==nullptr&&right==nullptr)return true;
        else if(left->val!=right->val)return false;
       bool l = travelnode(left->left,right->right);
      bool r =   travelnode(left->right,right->left);
      return l&&r;
          }

这个递归是前序遍历 检验当前的节点 是否符合 然后递归到下一层继续检验最后返回

最后的return 可以理解为递归的传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值