recursive比较简单。。
public class Solution
{
List<Integer> res = new ArrayList<Integer>();
public List<Integer> postorderTraversal(TreeNode root)
{
helper(root);
return res;
}
public void helper(TreeNode root)
{
if(root == null) return;
helper(root.left);
helper(root.right);
res.add(root.val);
}
}
Iterative:
在纸上写出顺序,然后想用STACK来做,结果发现放入STACK的顺序就是preOrder traversal先遍历right child再left child的顺序。
所以按preOrder来做,只不过先遍历右边再遍历左边,然后因为是倒过来的,最后reverse一下就行了。。
public class Solution
{
public List<Integer> postorderTraversal(TreeNode root)
{
Stack<TreeNode> stk = new Stack<TreeNode>();
List<Integer> res = new ArrayList<>();
if(root == null) return res;
TreeNode temp = root;
while(!stk.isEmpty() || temp != null)
{
while(temp!=null)
{
res.add(temp.val);
stk.push(temp);
temp = temp.right;
}
temp = stk.pop();
temp = temp.left;
}
Collections.reverse(res);
return res;
}
}
汗颜。。