145. 二叉树的后序遍历

132 阅读1分钟

题目介绍

力扣145题:leetcode-cn.com/problems/bi…

image.png

方法一:递归

简单代码如下:

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

    public void  postOrder2(TreeNode root,List<Integer> result) {
        if(root == null) {
            return ;
        }
        postOrder2(root.left,result);
        postOrder2(root.right,result);
        result.add(root.val);
    }
}

方法二:迭代

后序遍历不就是前序遍历的翻转吗,参考[144. 二叉树的前序遍历],前序遍历是往后加元素,后序遍历是往前加元素。

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        Deque<TreeNode> stack = new LinkedList<>();
        LinkedList<Integer> ans = new LinkedList<>();
        if (null == root) return ans;
        stack.addFirst(root);
        while(!stack.isEmpty()) {
            TreeNode node = stack.removeFirst();
            ans.addFirst(node.val);
            if (null != node.left) {
                stack.addFirst(node.left);
            }
            if (null != node.right) {
                stack.addFirst(node.right);
            }
        }
        return ans;
    }
}