145. Binary Tree Postorder Traversal

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;
        
    }

}

汗颜。。

posted @ 2016-09-21 11:05  哇呀呀..生气啦~  阅读(87)  评论(0编辑  收藏  举报