145-Binary Tree Postorder Traversal

Description

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

Example:

Input: [1,null,2,3]
   1
    \
     2
    /
   3

Output: [3,2,1]

Follow up: Recursive solution is trivial, could you do it iteratively?

问题描述

给定二叉树, 返回其后序遍历序列。

注意:使用迭代的方式做。

问题分析

解法

public class Solution {
    // Important, when you pop a node, ensure its children are traversed.
    public List<Integer> postorderTraversal(TreeNode root){
        Stack<TreeNode> s = new Stack();
        List<Integer> ans = new ArrayList();
        TreeNode cur = root;

        while(cur != null || !s.empty()){
            while(!isLeaf(cur)){
                s.push(cur);
                cur = cur.left;
            }
            if(cur != null) ans.add(cur.val);

            while(!s.empty() && cur == s.peek().right){
                cur = s.pop();
                ans.add(cur.val);
            }

            if(s.empty()) cur = null; 
            else cur = s.peek().right;
        }

        return ans;
    }
    private boolean isLeaf(TreeNode r){
        if(r == null) return true;
        return r.left == null && r.right == null;
    }
}
点赞