Binary Tree Postorder Traversal
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<Integer>();
if(root == null)
return ret;
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode cur = root;
TreeNode lastVisit = cur;
while(cur != null || !s.isEmpty()){
while(cur != null){
s.push(cur);
cur = cur.left;
}
cur = s.peek();
//如果右子树不存在或者已经访问,直接输出
if(cur.right == null || cur.right == lastVisit){
s.pop();
ret.add(cur.val);
lastVisit = cur;
cur = null;//此处联想right都遍历过了,无处可去所以cur=null
}else{
cur = cur.right;//否则转入右子树继续
}
}
return ret;
}Last updated