给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1/ \2   2/ \ / \
3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1/ \2   2\   \3    3

说明:

如果你可以运用递归和迭代两种方法解决这个问题,会很加分。

(算法萌新,轻拍求指点 XD 此题思路参考了官方题解。)

由于是很久没有接触这种类型的题目了,所以第一次拿到有点懵。还是看了题解才找回感觉。
看这个二叉树是不是对称的,主要是看二叉树左边和右边的节点是不是各自相反。每一层都是左右颠倒。
所以通过递归,判断左树和右树相反的节点的值是不是相同。
如果两边都为空,正常退出,说明递归到树的底部了。
如果有一边空了另外一半没空,说明有一边的节点没了,另外一半还在,肯定不是对称的树
如果两边对称,继续递归节点的左右节点,直到递归完全或者发现不对称。
代码如下:
递归:

 1 class Solution {
 2     public boolean isSymmetric(TreeNode root) {
 3         return isMirror(root, root);
 4     }
 5
 6     boolean isMirror(TreeNode t1, TreeNode t2)
 7     {
 8         if (t1 == null && t2 == null)
 9             return true;
10         if(t1 == null ||t2==null)
11             return false;
12         if(t1.val==t2.val)
13         {
14             return true && isMirror(t1.right, t2.left) && isMirror(t1.left, t2.right);
15         }
16         return false;
17     }
18
19 }

第二种方法是迭代,虽然知道做法和用意,但是在使用上不够熟练。大概思路就是把待处理的节点入队,然后依次出队处理,获取新的待处理节点入队。
在处理时出现了一个问题,在迭代时遇到两个都为空的节点不能直接退出循环,虽然可能是二叉树的底部,但是因为这时队列里可能还有其他未处理的节点等待处理,不能直接返回。
代码如下:
迭代:

 1 class Solution {
 2
 3
 4     public boolean isSymmetric(TreeNode root)
 5     {
 6         Queue<TreeNode> queue=new LinkedList<TreeNode>();
 7         queue.add(root);
 8         queue.add(root);
 9         while(!queue.isEmpty())
10         {
11             TreeNode t1=queue.poll();
12             TreeNode t2=queue.poll();
13             if(t1==null && t2==null)
14                 continue;
15             if(t1==null || t2==null)
16             {
17                 return false;
18             }
19             if(t1.val!=t2.val)
20                 return false;
21             queue.add(t1.left);
22             queue.add(t2.right);
23             queue.add(t1.right);
24             queue.add(t2.left);
25
26         }
27         return true;
28     }
29 }

转载于:https://www.cnblogs.com/axiangcoding/p/9879329.html

领扣(LeetCode)对称二叉树 个人题解相关推荐

  1. 力扣 (LeetCode)-对称二叉树,树|刷题打卡

    Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者 [已开启]任务一:刷题打卡 * 10 篇 哪吒人生信条:如果你所学的东西 处于喜欢 ...

  2. 领扣-104/111 二叉树的最大深度 Maximum Depth of Binary Tree MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)

    一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...

  4. golang力扣leetcode 297.二叉树的序列化与反序列化

    297.二叉树的序列化与反序列化 297.二叉树的序列化与反序列化 题解 代码 297.二叉树的序列化与反序列化 297.二叉树的序列化与反序列化 题解 题目:给你一个二叉树,序列化从一个string ...

  5. 力扣(Leetcode)-94. 二叉树的中序遍历

    描述 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 ...

  6. 领扣 LeetCode 42:接雨水(java)(网易有道面试真题)

    题目:链接 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情 ...

  7. 力扣101. 对称二叉树(JavaScript)

    递归: var isSymmetric = function(root) {//判断左右子节点是否相等const dd=function(left,right){if((left==null& ...

  8. 领扣(leetcode) 179 上升的温度

    1.题目解读 原题目:给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id. 1.1题目问题核心 此题与实际时间无关,实际是比较相邻两天(昨天 ...

  9. 【领扣leetcode数据库】176.第二高的薪水

    题目描述 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 ...

最新文章

  1. ASCII、Unicode、GBK和UTF-8字符编码的区别联系
  2. ecshop文章增加点击次数插件
  3. python fileinput_python fileinput模块
  4. Ubuntu 18.04 如何添加或删除 SWAP 交换分区
  5. html判断数字数据的大小写,大小写字母,特殊字符,数字,八位及以上四选三,全符合验证...
  6. VTK:图片之ImageLuminance
  7. TensorFlow 学习指南 一、基础
  8. 麦当劳降价“过冬” 一夜回到十年前(转)
  9. sublime搭建C/C++编译环境
  10. 汽车燃料效率分析实例
  11. MySQL 判断表中是否存在某条数据
  12. java代码表示非空链表整数_Leetcode: Topic 2 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的.......
  13. 2019工程伦理慕课答案(2019秋)习题及期末答案
  14. office 利用宏 给全文追加拼音
  15. java识别答题卡纸_答题卡读取答案的原理是什么?
  16. 如何提高自己的分析能力
  17. MPC5748G笔记 CAN can_pal
  18. LDAP ObjectClass 详解
  19. 怎么删除一个圆或者图形的一部分
  20. 用Selenium库获取网页源代码:新浪财经股票信息

热门文章

  1. python三维数据图_matplotlib中三维数据的热图
  2. mysql 6安装当前密码_MySQL8.0 安装踩坑指南
  3. 全国计算机c二级编程题,全国计算机二级C上机 编程题.doc
  4. php中trim的用法和例子,PHP ltrim()用法及代码示例
  5. 远程教育英语和计算机没过怎么办,网络教育英语统考能考几次 没考过怎么办?...
  6. 爬空气质量MySQL,mysql
  7. js实现oss批量下载文件_js下载文件到本地各种方法总结
  8. 计算机二级目录设置,word2设置标题格式,生成目录,奇偶页设置等等,适用考计算机二级办公软件,也适用于毕业论文格式设置...
  9. python语言程序设计实践教程答案实验六_Python程序设计实践教程
  10. Jmeter BeanShell学习(一) - BeanShell取样器(二)