[leetcode] Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
    
     2
    /
   3

return [3,2,1].

https://oj.leetcode.com/problems/binary-tree-postorder-traversal/

思路1:递归实现。

思路2:迭代实现。

public class Solution {
    public ArrayList<Integer> postorderTraversal(TreeNode root) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if (root == null)
            return result;
        postTravel(root, result);
        return result;
    }

    private void postTravel(TreeNode node, ArrayList<Integer> result) {
        if (node.left != null)
            postTravel(node.left, result);
        if (node.right != null)
            postTravel(node.right, result);
        result.add(node.val);
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        root.right = new TreeNode(2);
        root.right.left = new TreeNode(3);

        System.out.println(new Solution().postorderTraversal(root));
    }

}

第二遍记录: 直接在递归函数里判断是否为null。

public class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<Integer>();
        postOrder(root,res);
        return res;
    }
    
    private void postOrder(TreeNode root, List<Integer> res){
        if(root!=null){
            postOrder(root.left,res);
            postOrder(root.right,res);
            res.add(root.val);
        }
        
    }
    
}

非递归实现,需要2个stack。

public class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<Integer>();
        if(root==null)
            return res;
        Stack<TreeNode> stack = new Stack<TreeNode>();
        Stack<Integer> reversedRes = new Stack<Integer>();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode out = stack.pop();
            reversedRes.push(out.val);
            if(out.left!=null)
                stack.push(out.left);
            if(out.right!=null)
                stack.push(out.right);
                
        }
        while(!reversedRes.isEmpty()){
            res.add(reversedRes.pop());
        }
        
        return res;
    }
    
}
原文地址:https://www.cnblogs.com/jdflyfly/p/3829631.html