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;
}
}
难点
- 考虑清楚遍历顺序。
- 迭代法中,这里不是层序遍历,而是仅仅通过一个容器来成对存放我们要比较的元素。因此,虽然在这里的解法中使用了队列,实际上,用栈、数组也是可以的。
总结
二叉树问题的遍历顺序很重要!一般来说,递归法更容易实现,因此掌握好“递归三部曲”是很有必要滴 😃。
热门推荐
茶叶采摘后的保鲜与处理方法详解
“再也不敢相信网上的爬山攻略了”……深夜,他在天竺山中陡坡被找到
MySQL 主从复制:实现数据同步与高可用
混合架构CPU的能效核心与性能核心:设计哲学与技术实现
茶文化中的心灵沟通与情感交流
教育背景对薪资待遇的影响有多大
治疗腹泻的特效中药方剂
早晨做好7件事,胜过天天吃抗抑郁药
二手相机如何了解成色?全解:助您明智购 “机”
肾不好,尿酸高要怎么治
辣条的制作方法
如何培养观众的艺术素养和艺术审美能力
视网膜脱离有哪些治疗方法能治好吗
龚自珍《明良论》的原文及译文赏析
如何让通过智慧管网构建安全、高效、绿色的城市生命线
《诛仙3》职业平衡深度解析:十八个职业优劣全解读
陪产假怎么申请?
90%的甲状腺结节无需治疗!《自然》子刊:但这3种情况应重点关注
“骨折价”火车票背后的双赢智慧!经济效益社会效益共提升
7个最简单的养生习惯,每天只要几十分钟,身体真会感谢你!
饭局敬酒,别只说“我干了”,5个话术公式,一开口就让人很喜欢
公司资产怎么清算?一文详解清算流程及相关问题
肠系膜淋巴结是什么症状
工业物联网云平台:连接设备与智能管理的桥梁
融合“儒、佛、道”三家学说,拥有众多可移动文物的佛寺,你见过吗?
工伤认定后公司拖欠停工留薪工资怎么办?
招待贵客必备的15道荤菜做法最后一道价值千万
5个小技巧,带你克服自己的不配得感
止泻药种类有哪些 哪种止泻药效果好
GJB5000B 军用软件能力成熟度模型体系