Recursive
void postorder(Node node, List result) {
if (node == null) return;
postorder(node.left, result);
postorder(node.right, result);
result.add(node.val);
} Advertisement
Iterative two-stack
Deque s1 = new ArrayDeque<>(), s2 = new ArrayDeque<>();
s1.push(root);
while (!s1.isEmpty()) {
Node 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()) result.add(s2.pop().val); Advertisement
Expression tree eval
Post-order evaluates arithmetic expression trees: children (operands) first, then apply operator at root.
Recursive
void postorder(Node node, List result) {
if (node == null) return;
postorder(node.left, result);
postorder(node.right, result);
result.add(node.val);
} Iterative two-stack
Deque s1 = new ArrayDeque<>(), s2 = new ArrayDeque<>();
s1.push(root);
while (!s1.isEmpty()) {
Node 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()) result.add(s2.pop().val); Expression tree eval
Post-order evaluates arithmetic expression trees: children (operands) first, then apply operator at root.
Tree deletion
Delete children before parent. Post-order ensures no dangling references.