/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
Stack<TreeNode> s = new Stack<>();
List<Integer> result = new ArrayList<>();
TreeNode pointer = root, prev = null;
do {
while (pointer != null) {
s.push(pointer);
pointer = pointer.left;
}
prev = null;
while (!s.empty()) {
pointer = s.pop();
if (pointer.right == prev) {
result.add(pointer.val);
prev = pointer;
} else {
s.push(pointer);
pointer = pointer.right;
break;
}
}
} while (!s.empty());
return result;
}
}
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [3,2,1]
.