
【力扣】[热题 HOT100] 101.对称二叉树
发布日期:2021-05-10 06:34:00
浏览次数:17
分类:精选文章
本文共 1438 字,大约阅读时间需要 4 分钟。
给定一个二叉树,判断它是否是镜像对称的。
题目 检查一个二叉树是否是镜像对称的。镜像对称意味着左子树和右子树在结构和节点值上完全对称。例如,左子树的一个节点的左和右子树应与右子树的一个节点的右和左子树对应位置一致。
分析思路 两种主要方法:递归和迭代,可以解决这个问题。
-
递归方法
- 检查左右两节点都为空,返回true。
- 检查是否两节点同时存在,否则返回false。
- 比较当前节点值,左值等于右值,否则返回false。
- 递归检查左子树的左和右子树的右,右子树的左和左子树的右。
-
迭代方法
- 使用双端队列处理每对节点。
- 取出两节点,检查值是否相同,否则返回false。
- 将左子树右和右子树左交换入队,直到队列处理完毕。
- 代码示例
- 递归实现
- 迭代实现
- 总结 镜像对称不仅检查节点值相同,结构上也需对称。递归和迭代均可解决,但迭代方法在大树处理上更稳健。缺乏节点或结构不对称时,必返回false,基线条件处理至关重要。
class Solution { public boolean check(TreeNode left, TreeNode right) { if (left == null && right == null) return true; if (left == null || right == null) return false; return left.val == right.val && check(left.left, right.right) && check(left.right, right.left); } public boolean isSymmetric(TreeNode root) { return check(root, root); }}
class Solution { public boolean check(TreeNode u, TreeNode v) { Queueq = new LinkedList<>(); q.add(u); q.add(v); while (!q.isEmpty()) { TreeNode a = q.poll(); TreeNode b = q.poll(); if (a == null && b == null) continue; if (a == null || b == null || a.val != b.val) return false; q.add(a.left); q.add(b.right); q.add(a.right); q.add(b.left); } return true; } public boolean isSymmetric(TreeNode root) { return check(root, root); }}
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月19日 22时58分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
git远程仓库切换
2019-03-14
带照片捕捉功能的ESP32-CAM PIR运动检测器
2019-03-15
如何使用SSH远程管理Linux服务器
2019-03-15
降级到旧版本macOS的3种方法
2019-03-15
学习Vue.js2.0(国外视频教程)
2019-03-15
wxPython和PyOpenGL视频
2019-03-15
在30分钟内学习PHP
2019-03-15
Python http.server 服务器
2019-03-15
Python svm 支持向量机
2019-03-15
OpenStack 最小化安装配置(一):物理机网桥配置
2019-03-15
PS快速美白照片
2019-03-15
ubuntu 16.04 镜像下载
2019-03-15
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2019-03-15
微信小程序云开发:怎么删除云函数?已解决
2019-03-15
第一次被黑
2019-03-15
PyCharm配置anaconda环境
2019-03-15