二叉树的后序遍历
题目描述
给定一个二叉树,返回它的 后序 遍历。
思路分析
记录遍历过的最后一个节点。当前节点不存在右节点或者右节点遍历过,则访问当前节点。代码如下:
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<>();
if (root==null)return list;
Stack<TreeNode> stack = new Stack<>();
TreeNode lastNode=null;
while (!stack.isEmpty()||root!=null){
while (root!=null){
stack.push(root);
root=root.left;
}
if (!stack.isEmpty()){
TreeNode pop = stack.pop();
if (pop.right==null||pop.right==lastNode){
list.add(pop.val);
lastNode=pop;
}else {
stack.push(pop);
root=pop.right;
}
}
}
return list;
}