Binary Tree Postorder Traversal

两个stack:

public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
Stack<TreeNode> s1 = new Stack<TreeNode>();
Stack<TreeNode> s2 = new Stack<TreeNode>();
List<Integer> result = new ArrayList<Integer>();
if(root == null) return result;
s1.push(root);
while(!s1.isEmpty()) {
TreeNode pop = s1.pop();
s2.push(pop);
if(pop.left != null) s1.push(pop.left);
if(pop.right != null) s1.push(pop.right);
}
while(!s2.isEmpty()) {
result.add(s2.pop().val);
}
return result;
}
}

一个Stack:

public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
Stack<TreeNode> s = new Stack<TreeNode>();
List<Integer> result = new ArrayList<Integer>();
if(root == null) return result;
s.push(root);
TreeNode prev = null;
while(!s.isEmpty()) {
TreeNode curr = s.peek();
if(prev == null || prev.left == curr || prev.right == curr) {
if(curr.left != null) {
s.push(curr.left);
} else if(curr.right != null) {
s.push(curr.right);
} else {
result.add(curr.val);
s.pop();
}
} else if(curr.left == prev) {
if(curr.right != null) {
s.push(curr.right);
} else {
result.add(curr.val);
s.pop();
}
} else/* if(curr.right == prev)*/ {
result.add(curr.val);
s.pop();
}
prev = curr;
}
return result;
}
}


posted @ 2014-12-29 11:19  江南第一少  阅读(107)  评论(0)    收藏  举报