• 剑指Offer28.对称的二叉树
  • 题目:
    判断一个二叉树是否对称?
  • 思路:
    1.递归:O(n):二叉树共n个结点,每次调用递归函数isSame都可以完成两个结点的比较,因此最多调用n/2次递归函数(即比较到最后一对结点),最坏情况下O(n):当二叉树退化成两条链表,此时二叉树的深度为n/2,可以使在满足递归条件前提下深度达到最深(若再少一个就会提前return false),这时系统使用O(n)的栈空间,下面为具体解释:

    思路:将处于对称位置上的结点两两比较,直至比较到最下层;
class Solution {private:bool isSame(TreeNode* l, TreeNode* r) {//判断l子树和r子树是否对称if (!l && !r) return true;//都为空算对称else if (!l || !r) return false;//只有一个空肯定不对称else if (l->val != r->val) return false;//都不为空,但值不相等也不对称//注意:对称指的是:左的左对比右的右,左的右对比右的左else return isSame(l->left, r->right) && isSame(l->right, r->left);//说明当前结点对称,就要递归的判断孩子}
public:bool isSymmetric(TreeNode* root) {if (!root) return true;return isSame(root->left, root->right);//处于对称位置上的结点两两比较}
};

2.迭代:O(n),O(n)
由于本题目的是两两比较处于对称位置上的节点值,因此可以层序遍历的时候,在入队时,将对称位置上的结点两两入队,到时候就可以成对的取出进行比较;
采用队列,栈,数组均可;

//利用队列,将出于对称位置上的结点两两入队
//栈,甚至数组同理
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()) {for (int i = 0; i < q.size(); ++i) {//这里利用可变的q.size()简化,直至遍历完全部节点才退出dor循环auto l = q.front();q.pop();auto r = q.front();q.pop();//中if (!l && !r) continue;if ((!l && r) || (l && !r) || (l->val != r->val)) return false;q.push(l->left);//成对入队q.push(r->right);q.push(l->right);//成对入队q.push(r->left);}}return true;}
};

剑指Offer28.对称的二叉树相关推荐

  1. 2021-06-30剑指offer28.对称的二叉树

    问题可以拆解为(遍历+比较) 由于是对称的位置比较,遍历顺序比较对称的有前序遍历和后序遍历 本题采用前序遍历 我做的不好的地方是,没有意识到两个分支可以同时遍历,想着一个分支一个分支的遍历,为如何同时 ...

  2. 剑指Offer_58_对称的二叉树

    题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 解题思路 从根结点开始判断,首先判断左右子树是否相同,然后对于相同的结点,判断 ...

  3. 【LeetCode】剑指 Offer 37. 序列化二叉树

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

  4. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  5. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

  6. 【LeetCode】剑指 Offer 55 - I. 二叉树的深度

    [LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...

  7. 剑指 Offer II 044. 二叉树每层的最大值

    链接:剑指 Offer II 044. 二叉树每层的最大值 题解: /*** Definition for a binary tree node.* struct TreeNode {* int va ...

  8. 剑指 Offer II 047. 二叉树剪枝

    剑指 Offer II 047. 二叉树剪枝: 题目链接 :剑指 Offer II 047. 二叉树剪枝 题目: 给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1.请剪除该二 ...

  9. 剑指offer之中判断二叉树是不是对称二叉树(递归和非递归实现)

    1 问题 判断二叉树是不是对称(递归和非递归实现) 如下二叉树,就是对称的二叉树 23 3 1 4 4 1 如下二叉树,就是非对称的二叉树 23 3 1 4 4 2 2 代码实现 #include & ...

  10. 剑指Offer #04 重建二叉树(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...

最新文章

  1. 某程序员面试支付宝P7,面试已通过,却因为背调没过!再进阿里失败!阿里背调,到底调啥?...
  2. Android 编译报错:Could not get resource
  3. wireshark使用教程 linux,Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕...
  4. set trans 必须是事务处理的第一个语句_MySQL中特别实用的几种SQL语句送给大家
  5. Android 颜色渲染(九) PorterDuff及Xfermode详解
  6. Andrew Ng教你如何引领公司进入AI时代
  7. 监听器第一篇【基本概念、Servlet各个监听器】
  8. 11G新特性 -- 分区表和增量统计信息
  9. R语言向matlab转化,我有一段MATLAB的程序,现在想转换成R语言代码
  10. html超链接的设置,HTML超链接怎么设置
  11. SSL数字证书的签发及使用(服务器证书)
  12. 定位Oops的具体代码行[zt]
  13. 51单片机基础之OLED
  14. javaweb springboot餐厅点餐系统源码
  15. html表白程序源码_表白程序源码html_程序员表白代码html (1)
  16. Labview与三菱PLC通讯 (2)
  17. 打印的时候显示域服务器不可用,Win10打印时active directory域服务不可用解决方法...
  18. 清明节到来 祭扫各纷然
  19. python16——时间记录器
  20. 数据我爬定了,限流也挡不住,我说的

热门文章

  1. html视频外链地址,HTML第三方视频链接使用以及属性.docx
  2. 何谓dB、dBm、dBi
  3. 【社会网络分析图】python实现
  4. 电脑XP系统最大支持多大内存?
  5. 微信扫码下载apk快速解决方案,中间页引导法
  6. error: crosses initialization of ‘std::string xx变量‘
  7. UFS Hibernate介绍--代码部分
  8. SheetJS xlsx js库入门使用
  9. 数字视频编解码基础知识大全
  10. 如何解决Access denied for user ''@'localhost' (using password: NO)错误