/**
* 145. 二叉树的后序遍历
* @author wsq
* @date 2020/09/29
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal
*/
package com.wsq.tree;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class PostorderTraversal {
/**
* 使用栈结构模拟递归,关键点是怎么判断右节点已经被访问过了
* 因此增加了一个prev指针,指向上一个被访问的节点,从root重新访问右节点时,就可以判断出,右节点是否已经被访问过了
* @param root
* @return
*/
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ansList = new ArrayList<>();
if(root == null) {
return ansList;
}
Deque<TreeNode> stack = new LinkedList<>();
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) {
ansList.add(root.val);
prev = root;
root = null;
}else {
stack.push(root);
root = root.right;
}
}
return ansList;
}
}
145. 二叉树的后序遍历(迭代实现)
最新推荐文章于 2023-10-28 15:46:52 发布
本文介绍如何通过迭代方法实现二叉树的后序遍历,利用栈模拟递归过程,通过prev指针判断节点访问状态,适用于LeetCode题目。
695

被折叠的 条评论
为什么被折叠?



