101. 对称二叉树

​ 给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

提示:

  • 树中节点数目在范围 [1, 1000]
  • -100 <= Node.val <= 100

进阶:你可以运用递归和迭代两种方法解决这个问题吗?

我的方法:老实巴交的层序遍历

​ 使用修改的层序遍历(为空时也添加null),根据队列上次添加的元素个数获得每一层的节点数(包含空节点),然后再判断每一层的节点是否对称(暴击循环或者根据kmp的next数组判断最大公共前后缀),emmm总之就是做得特别麻烦。

递归做法

​ 使用两个遍历同时循环判断,之前看题解做过一次,但是这次还是完全想不到,然后看了一眼想法直接写出来了,还需要多做啊

    public boolean isSymmetric(TreeNode root1, TreeNode root2) {
if(root1 == null && root2 == null) {
return true;
} else if(root1 == null || root2 == null || root1.val != root2.val) {
return false;
} else {
return isSymmetric(root1.left, root2.right)
&& isSymmetric(root1.right, root2.left);
}
} public boolean isSymmetric(TreeNode root) {
if(root == null) {
return true;
}
return isSymmetric(root.left, root.right);
}
非递归写法,类似层序遍历的写法

​ 再次献上我的膝盖,直接看代码可能不是太理解,自己画一下图模拟下队列的过程就会立刻明白了

public boolean isSymmetric(TreeNode root) {
if(root == null) {
return true;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root.left);
queue.add(root.right);
while(!queue.isEmpty()) {
TreeNode leftNode = queue.poll();
TreeNode rightNode = queue.poll();
if(leftNode == null && rightNode == null) {
continue;
}
if(leftNode == null || rightNode == null || leftNode.val != rightNode.val) {
return false;
}
queue.add(leftNode.left);
queue.add(rightNode.right);
queue.add(leftNode.right);
queue.add(rightNode.left);
}
return true;
}

最新文章

  1. replace实现正则过滤替换非法字符
  2. iOS开发知识点总结
  3. SCOI2009粉刷匠
  4. 【转载】让你的MATLAB代码飞起来
  5. 1、C语言基本数据类型
  6. word文档的生成、修改、渲染、打印,使用Aspose.Words
  7. java 线程演示
  8. 初学DOM树解析xml文件
  9. 什么是Gn Gi Gb!
  10. PLSQL_Oracle物化视图Material View的基本概念和用法 (概念)
  11. meteor icons &amp; splash配置
  12. JS 数组乱序
  13. Android Tab控件简介
  14. js原生设计模式——9外观模式封装
  15. MongoDB3.4 shell CRUD操作
  16. python+eclipse+pydev开发环境搭建
  17. [Swift]LeetCode746. 使用最小花费爬楼梯 | Min Cost Climbing Stairs
  18. 越狱解决iphone4s外放无声音
  19. jQuery AJAX方法 前台往后台传数据
  20. Variables多种表达

热门文章

  1. C语言初级阶段4——数组3——字符数组
  2. Docker In Action 学习笔记 根据第二版有所更新
  3. sql年、季度、月的第一天
  4. shell命令查找文件
  5. C# 图片 等 文件 读取操作 的一点提示
  6. Matlab %陆
  7. 关于JDBC的学习
  8. 在app中如何使weib-view不铺满全屏,自适应页面
  9. Python学习笔记--文件的相关操作
  10. 最新 umi4-max 如何使用 webpack5 联邦模块