Loading

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;
    }
}
posted @ 2020-10-23 12:30  上海井盖王  阅读(85)  评论(0)    收藏  举报