迭代实现二叉树的遍历-算法通关村
public List<Integer> postOrderTraversal(TreeNode root){
List<Integer> res = new ArrayList<>();
if(root == null){
return res;
}
Deque<TreeNode> stack = new LinkedList<>();
TreeNode node = root;
while(!stack.isEmpty() || node != null){
//将当前节点的值添加到结果列表res中,
// 然后将当前节点入栈,并将node更新为其右子节点。
// 这个循环会一直执行,直到当前节点为空
while(node != null){
res.add(node.val);
stack.push(node);
node = node.right;
}
node = stack.pop();
//将node更新为该节点的左子节点,以便后续遍历左子树。
node = node.left;
}
//列表中的顺序是左子树-右子树-根节点。
// 但是后序遍历的正确顺序应该是左子树-右子树-根节点,
// 所以需要将结果列表res反转。
Collections.reverse(res);
return res;
}