LeetCode 101-对称二叉树:递归与迭代解法详解
创作时间:
作者:
@小白创作中心
LeetCode 101-对称二叉树:递归与迭代解法详解
引用
CSDN
1.
https://blog.csdn.net/qq_44581505/article/details/139493827
LeetCode 101-对称二叉树
题目链接
代码随想录
题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
解题思路
判断:
同时遍历并比较根节点的左、右子树。
要比较外侧和里侧节点,两个子树的遍历顺序应该为:一个是左右根,另一个是右左根。都可以理解为是后序遍历。

可用递归法、迭代法。
递归法:
- 确定递归函数的参数和返回值:参数是两个树,即根节点的左孩子和右孩子。返回值是bool类型。
- 确定终止条件
- 首先考虑两个节点为空的情况,避免后面比较数值时操作空节点:左、右节点有且仅有一个为空,不对称,return false,左、右节点都为空,对称,return true。
- 其次考虑两个节点都不为空: 比较节点数值,若不同,return false。
- 确定单层递归的逻辑:即,处理左右节点都不为空,且数值相同的情况。
- 比较外侧是否对称
- 比较内侧是否对称
- 若有一侧不对称,return false;否则 return true
- 迭代法(不是层序遍历):
- 使用队列,判断根节点的左子树和右子树的内外侧是否相等。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
递归法
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return compare(root.left, root.right);
}
public boolean compare(TreeNode left, TreeNode right) {
if (left == null && right == null) return true;
else if ((left == null && right != null) || (left != null && right == null)) return false;
else if(left.val != right.val) return false;
boolean outside = compare(left.left, right.right);
boolean inside = compare(left.right, right.left);
return outside&&inside;
}
}
迭代法
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
//使用普通队列
Queue<TreeNode> deque = new LinkedList<>();
deque.offer(root.left);
deque.offer(root.right);
while(!deque.isEmpty()){
TreeNode left = deque.poll();
TreeNode right = deque.poll();
if (left == null && right == null) continue;
if (left == null || right == null || left.val != right.val) return false;
//如果左右节点相等,继续往下判断
deque.offer(left.left);
deque.offer(right.right);
deque.offer(left.right);
deque.offer(right.left);
}
return true;
}
}
难点
- 考虑清楚遍历顺序。
- 迭代法中,这里不是层序遍历,而是仅仅通过一个容器来成对存放我们要比较的元素。因此,虽然在这里的解法中使用了队列,实际上,用栈、数组也是可以的。
总结
二叉树问题的遍历顺序很重要!一般来说,递归法更容易实现,因此掌握好“递归三部曲”是很有必要滴 😃。
热门推荐
厦门医学院附属第二医院成立院内急救快速反应小组
春季情志调节指南:从起居、运动到饮食全方位建议
王力宏《你不知道的事》歌词解析:那些未曾说出口的深情
2024亚乒赛:国乒已丢三冠,谁之过?又有哪些收获呢?
又一跨海通道来了?
电动车VS燃油车:谁更耐用?英国研究给出答案
大学生创新创业团队如何设置分工?
大基金三期落地:3440亿注册资本,将如何影响半导体产业?
为什么量子密钥分发是绝对安全的?
贷款资金发放与使用全解析,帮助你避免不必要的财务风险!
汽车三清的具体内容是什么?三清对车辆保养有何重要性?
招聘人才年轻化不该一味卷年龄 能力才是关键
基于芯片的热重/差热分析(TG/DTA)材料联合表征MEMS平台
低配置游戏哪个最好玩?十大必玩低配置游戏推荐
超速行驶的处罚标准是什么?
中国个人所得税改革时间及影响的分析
页面上有100个请求发送,突然切换页面,前端该怎么优化?
深度解析:构建投资组合的五大技术分析指标与工具
从全球安全局势看无人机和反无人机的技术演进趋势
探索现代简约风格的装修案例与设计灵感
辣椒炒肉——香气四溢的传统佳肴
南宁青秀山龙象塔:历史、文化与传说的完美融合
隐秘疯长、花样“收割”新股民 起底荐股“刺客”
别眨眼!这60张图是你来泰山的理由
自我认知的镜子:通过反思与自我评估促进孩子的自我成长
代谢功能下降是什么原因
理解投影仪亮度:流明数值背后的秘密
为啥工作越努力,越容易胖?
中国科技“七姐妹”正待“出阁”
乌尔善谈《封神2》创作理念:希望观众给《封神3》机会