1. 程式人生 > 實用技巧 >145. [二叉樹]二叉樹的後序遍歷

145. [二叉樹]二叉樹的後序遍歷

145. 二叉樹的後序遍歷

方法一:遞迴

class solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        postorderViste(root, ans);
        return ans;
    }
    
    public void postorderViste(TreeNode root, List<Integer> list){
        if (root == null){
            return ;
        }
        postorderViste(root.left, list);
        postorderViste(root.right, list);
        list.add(root.val);
    }
}

方法二:迭代

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

        LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
        TreeNode prev = null;
        while (root != null || !stack.isEmpty()) {
            while (root != null){
            	stack.offer(root);    
                root = root.left;
            }
            root = stack.pollLast();
            if(root.right == null || root.right == prev){
                ans.add(root.val);
                prev = root;
                root = null;
            } else {
                stack.offer(root);
                root = root.right;
            }
        }
        return ans;
    }
}