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