LeetCode 145:二叉树的后序遍历(迭代法)
创作时间:
作者:
@小白创作中心
LeetCode 145:二叉树的后序遍历(迭代法)
引用
CSDN
1.
https://m.blog.csdn.net/coder_ljw/article/details/144144137
本文将详细讲解LeetCode第145题“二叉树的后序遍历”的解题思路和代码实现。通过对比递归和迭代两种方法,帮助读者更好地理解后序遍历的实现。
题目描述
给你一棵二叉树的根节点 root
,返回其节点值的后序遍历。
示例
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
解释:
示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[4,6,7,5,2,9,8,3,1]
解释:
示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
提示:
- 树中节点的数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
求解思路
栈实现
- 创建了一个
ArrayList
用于存储后序遍历的结果。如果根节点为空,直接返回这个空列表。 - 接着创建了一个栈
stack
,用于模拟递归调用栈,存放待访问的二叉树节点。同时定义了lastVisited
变量,它的作用是记录上一次访问的节点,以便后续判断当前节点的左右子树是否已经被访问过了。 - 将根节点压入栈后,进入循环,只要栈不为空,就执行以下操作,取出栈顶节点(但不立即弹出,通过
peek
方法),然后进行判断:
- 如果当前栈顶节点满足左子树和右子树都为空,或者它的左右子树节点都是上一次已经访问过的节点(通过和
lastVisited
对比判断),那么说明这个节点可以被访问了,将其值添加到结果列表中,然后弹出栈顶节点,并更新lastVisited
为当前弹出的这个节点,表示它已经被访问过了。 - 如果不满足上述可以直接访问的条件,那么按照后序遍历的顺序要求,先处理右子树(如果存在),将右子树节点压入栈;再处理左子树(如果存在),将左子树节点压入栈,以便后续按照正确顺序进行访问。
- 有了基本的思路,接下来我们就来通过代码来实现一下。
实现代码
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if (root == null) {
return res;
}
Deque<TreeNode> stack = new LinkedList<TreeNode>();
TreeNode prev = null;
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if (root.right == null || root.right == prev) {
res.add(root.val);
prev = root;
root = null;
} else {
stack.push(root);
root = root.right;
}
}
return res;
}
}
运行结果
热门推荐
推荐系统:从基础到前沿
长期交感神经兴奋对身体的影响
自愿放弃抚养权书怎么写
“静”享健康丨“磨牙”只是因为太累吗?
304不锈钢管与铝型材在建筑装饰领域的对比
除夕的习俗,除夕有哪些习俗
盘点五大广西辣味美食,都是本地人记忆中的味道,经典风味美食
养老服务记|喘息性养老服务,给照护家属“放个假”
妹妹为什么喜欢哭呢?
喝咖啡对心脏不好?研究证实:这样喝咖啡,心血管病死亡风险能下降17%
淋巴结影是什么?医生专业解读这一医学影像学现象
PDCA循环:持续精进的工具
为什么酱香酒有醒酒快,不上头的特性?
如何选择合适的酒店?详解选择酒店的要素与建议
武书连2025中国大学排名发布:浙大第2,华科武大超复旦!
爬藤月季怎么养才能更旺盛?
古琴曲《关山月》:琴声诉说边关将士的思乡情怀
媒体采访应急预案:提高媒体应对能力的关键措施
政策市场双重驱动 汽车产业破“卷”迎新
福建厦门:寻找城中村改造的“最优解”
房子漏雨物业不管?教你正确维权方法
电脑关机前真的需要退出所有软件吗?专家为你解答
互惠生在丹麦:签证申请
根据十二生肖特征起名
老公的被子和枕头总有异味?这些实用解决方案帮你轻松应对
凝心聚力,打造“志愿广东”新格局
跖疣会传染吗
跖疣会传染吗
5070显卡与4090大对比,哪个更适合你的需求?
宋金时期钧窑天蓝釉三足筒式炉