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;
}
}
运行结果
热门推荐
董事会换届选举程序是什么?
多数专业闻所未闻,这些特色专业带你长见识!
情绪、货币、事件......究竟是什么在影响比特币价格?
美联储降息如何影响比特币?
猫咪怀孕期的饮食指南(营养均衡)
姜子牙封神的故事
梵音:佛教音乐中的清净之声
水玻璃是什么?水玻璃化学成分、凝固时间、特性及用途
天津武清:打造大运河文化生态发展带,带动全域高质量发展
动漫设计专业主要学什么?专业课程有哪些?
沙糖桔,一年两季的果实(挑选成熟期,品尝口感鲜美)
如何帮助儿童提高核心力量和姿势控制?
蔷薇?月季?玫瑰?一文读懂它们的区别
科学抗癌,从“肠”计议--结直肠癌的三级预防,您知道吗?
赤芍的功效与作用及食用方法
长链脂肪酸:身体健康的“润滑剂”
如何实现汽车的弹射起步?弹射起步对车辆有何影响?
CPU后缀字母详解:从K到Y的性能与功耗全解析
使用 FFmpeg 实现录屏和录音
轴用旋转泛塞封:核心功能与应用详解
囊肿、结节和肿瘤,是我们常说的癌吗?
糖尿病足的截肢指征有哪些
少交1元手续费,多赚3.1亿?谁拿了你的股票交易费用?炒股手续费影响有多大?
菠菜的9大健康益处
织密关爱网,守护独居老人生命线
图解|大龄未婚比例上升意味着什么?
百年奥运气象数据告诉你,气温会如何影响输赢?
氯吡格雷+阿司匹林个性化用药
蜂王浆是怎样形成的?一次喝多少?正确吃法全解析!
东西方文明的交汇:罗马与汉朝的交流