Skip to content

Instantly share code, notes, and snippets.

@fever324
Created July 23, 2015 12:38
Show Gist options
  • Select an option

  • Save fever324/0d917a7bf0a5e52cf272 to your computer and use it in GitHub Desktop.

Select an option

Save fever324/0d917a7bf0a5e52cf272 to your computer and use it in GitHub Desktop.
Three way of post order traversal
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> l = new LinkedList<Integer>();
if(root == null) {
return l;
}
Stack<TreeNode> s1 = new Stack<>();
Stack<TreeNode> s2 = new Stack<>();
s1.push(root);
while(!s1.isEmpty()) {
TreeNode n = s1.pop();
s2.push(n);
if(n.left != null) {
s1.push(n.left);
}
if(n.right != null) {
s1.push(n.right);
}
}
while(!s2.isEmpty()) {
l.add(s2.pop().val);
}
return l;
}
public List<Integer> postorderTraversalOneStack(TreeNode root) {
List<Integer> l = new LinkedList<Integer>();
Stack<TreeNode> s = new Stack<>();
TreeNode traverse = root;
TreeNode prev = null;
while(traverse != null || !s.isEmpty()) {
while(traverse != null) {
s.push(traverse);
traverse = traverse.left;
}
if(s.peek().right != null && prev != s.peek().right) {
traverse = s.peek().right;
} else {
l.add(s.peek().val);
prev = s.pop();
}
}
return l;
}
public List<Integer> postOrderRecursive(List<Integer> l, TreeNode node) {
if(node == null) {
return l;
}
postOrderRecursive(l, node.left);
postOrderRecursive(l, node.right);
l.add(node.val);
return l;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment