class Solution{
//递归实现
ArrayList<Integer> list = new ArrayList<Integer>();
public ArrayList<Integer> postorderTraversal2(TreeNode root) {
//后序遍历
if(root!=null){
postorderTraversal2(root.left);
postorderTraversal2(root.right);
list.add(root.val);
}
return list;
}
}
class Solution {
//循环实现
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root,visit = null;//指向当前节点
while(cur != null || !stack.isEmpty()){
//一直添加左子树
if(cur != null){
stack.add(cur);
cur = cur.left;
}else{
cur = stack.peek();
//右子树被访问过则添加
if(cur.right == null || cur.right == visit){
cur = stack.pop();
list.add(cur.val);
visit = cur;
cur = null;
}//右子树没被访问过
else{
cur = cur.right;
}
}
}
return list;
}
}