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;
}
}