力扣-145-二叉树的后序遍历

题目:
145. Binary Tree Postorder Traversal(hard)


解题思路:
使用栈模仿递归方法。
统一前、中、后的迭代遍历方法


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
if(root != null) stack.add(root);
while(!stack.isEmpty()){
TreeNode node = stack.peek();
if(node != null){
stack.pop();//将该结点弹出,避免重复操作,下面再将中右左节点添加到栈中
stack.push(node);//添加中节点
stack.push(null);//中节点访问过,但还没有处理,需做一下标记

if(node.right != null) stack.push(node.right);//添加右节点
if(node.left != null) stack.push(node.left);//添加左节点
}else{
stack.pop();//标记空结点弹出
node = stack.peek();//重新取出栈中元素
stack.pop();
res.add(node.val);//加入到数组中
}
}

return res;
}