Skip to content

Commit 5445b27

Browse files
MEDIUM/src/medium/BinaryTreePostOrderTraversal.java
1 parent dc4fa31 commit 5445b27

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package medium;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.Stack;
7+
8+
import utils.CommonUtils;
9+
import classes.TreeNode;
10+
11+
public class BinaryTreePostOrderTraversal {
12+
/**I was really confused about how iterative version works for POST-order traversal, since we'lld need to add a field in TreeNode
13+
class called "visited", to mark this node has been visited before, otherwise it goes into indefinite loop.
14+
Then I turned to Discuss, only found that the top-voted one is actually using such a trick:
15+
modify the code for pre-order traversal so that it becomes root->right->left, and then reverse the result to get left->right->root, so tricky!!!*/
16+
public static List<Integer> postorderTraversal_iterative(TreeNode root) {
17+
List<Integer> result = new ArrayList();
18+
Stack<TreeNode> stack = new Stack();
19+
if(root == null) return result;
20+
stack.push(root);
21+
while(!stack.isEmpty()){
22+
root = stack.pop();
23+
result.add(root.val);
24+
if(root.left != null) stack.push(root.left);
25+
if(root.right != null) stack.push(root.right);
26+
}
27+
Collections.reverse(result);
28+
return result;
29+
}
30+
31+
public static void main(String...strings){
32+
// TreeNode root = new TreeNode(1);
33+
// root.left = new TreeNode(2);
34+
// root.right = new TreeNode(3);
35+
36+
// TreeNode root = new TreeNode(1);
37+
// root.left = new TreeNode(2);
38+
39+
TreeNode root = new TreeNode(1);
40+
root.right = new TreeNode(2);
41+
List<Integer> result = postorderTraversal_iterative(root);
42+
CommonUtils.printList(result);
43+
}
44+
45+
public List<Integer> postorderTraversal_recursive(TreeNode root) {
46+
List<Integer> result = new ArrayList();
47+
return post(root, result);
48+
}
49+
50+
List<Integer> post(TreeNode root, List<Integer> result){
51+
if(root == null) return result;
52+
post(root.left, result);
53+
post(root.right, result);
54+
result.add(root.val);
55+
return result;
56+
}
57+
}

0 commit comments

Comments
 (0)