前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对称二叉树

对称二叉树

作者头像
大忽悠爱学习
发布2021-11-15 10:33:00
2040
发布2021-11-15 10:33:00
举报
文章被收录于专栏:c++与qt学习

DFS

递归三步走:

  1. 递归结束条件:如果左右字节点均为空,返回true
  2. 找到函数等价式: 如果左右子节点其中一个为空或者左右子节点均不为空并且两个子节点的值不等,返回false(判断是否对称就是当前递归的函数等价式)
  3. 递归函数返回值:左子节点的左子节点和右子节点的右子节点比较,左子节点的右子节点和右子节点的左子节点比较,当这两个比较结果都为真的时候,返回真

判断二叉树是否是对称,需要从子节点开始比较,两个子节点的值必须相同,并且左子节点的右子节点(如果有)必须等于右子节点的左子节点,左子节点的左子节点必须等于右子节点的右子节点。就像下面图中那样

代码语言:javascript
复制
 class Solution {
 public:
     bool isSymmetric(TreeNode* root) 
     {
         if (!root) return true;
         //从两个子节点开始判断
         return is(root->left, root->right);
     }
     bool is(TreeNode* left, TreeNode* right)
     {
         //如果左右子节点都为空,说明当前节点是叶子节点,返回true
         if (!left && !right) return true;
         //如果当前节点只有一个子节点或者有两个子节点,但两个子节点的值不相同,直接返回false
         if (!left || !right || left->val != right->val) return false;
         //然后左子节点的左子节点和右子节点的右子节点比较,左子节点的右子节点和右子节点的左子节点比较
         return is(left->left, right->right) && is(left->right, right->left);
     }
 };

BFS

非递归

代码语言:javascript
复制
 class Solution {
 public:
     bool isSymmetric(TreeNode* root) 
     {
         if (!root)
             return true;
         queue<TreeNode*> q;
         //左右字节点入队
         q.push(root->left);
         q.push(root->right);
         //队列不为空
         while (!q.empty())
         {
             //获取当前对头两元素
             TreeNode* left = q.front();
             q.pop();
             TreeNode* right = q.front();
             q.pop();
             //如果两个都为空,符合对称要求,直接进行下一次循环
             if (!left && !right) continue;
             //如果其中一个为空,出现不对称
             if (!left || !right) return false;
             //如果当前左右字节的值不等,出现不对称
             if (left->val != right->val) return false;
         //这里要记住入队的顺序,他会每两个两个的出队。
        //左子节点的左子节点和右子节点的右子节点同时
        //入队,因为他俩会同时比较。
        //左子节点的右子节点和右子节点的左子节点同时入队,
        //因为他俩会同时比较
             q.push(left->left);
             q.push(right->right);
             q.push(left->right);
             q.push(right->left);
         }
         return true;
     }
 };
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DFS
  • BFS
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档