O(n) O(h)
Intuition
Postorder visits both subtrees before the node — useful when a node's result depends on its children (e.g. deleting a tree).
Explanation
Left, Right, Node
dfs(node):
if node is None: return
dfs(node.left)
dfs(node.right)
visit node.val
Worked example
[1,null,2,3] → [3,2,1].
Complexity
- Time: O(n).
- Space: O(h).
Implementation
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
dfs(root, res);
return res;
}
private void dfs(TreeNode node, List<Integer> res) {
if (node == null) return;
dfs(node.left, res);
dfs(node.right, res);
res.add(node.val);
}
}