package leetcode;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class demo_145 {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<Integer>();
Stack<TreeNode> stack=new Stack<TreeNode>();
TreeNode node=root;
TreeNode pre=null;
while(node!=null||!stack.isEmpty()) {
while(node!=null) {
stack.push(node);
node=node.left;
}
//判断当前节点是否第一次被访问
node=stack.pop();
//如果右节点为空或者当前节点是第二次被访问,则真正出栈
if(node.right==null||pre==node.right) {
list.add(node.val);
pre=node;
node=null;
}else {
//是第一次被访问,则将该节点再次入栈,访问其右节点
stack.push(node);
node=node.right;
}
}
return list;
}
}