N-ary Tree Postorder Traversal

easy tree dfs

Problem

Given the root of an n-ary tree, return the postorder traversal of its nodes' values — recurse into each child left-to-right first, then emit the node's value.

Inputroot = [1, null, 3, 2, 4, null, 5, 6]
Output[5, 6, 3, 2, 4, 1]
Each subtree is fully processed before its root is emitted.

def postorder(root):
    out = []
    def dfs(node):
        if not node:
            return
        for c in node.children:
            dfs(c)
        out.append(node.val)
    dfs(root)
    return out
function postorder(root) {
  const out = [];
  function dfs(node) {
    if (!node) return;
    for (const c of node.children) dfs(c);
    out.push(node.val);
  }
  dfs(root);
  return out;
}
class Solution {
    public List<Integer> postorder(Node root) {
        List<Integer> out = new ArrayList<>();
        dfs(root, out);
        return out;
    }
    private void dfs(Node node, List<Integer> out) {
        if (node == null) return;
        for (Node c : node.children) dfs(c, out);
        out.add(node.val);
    }
}
vector<int> postorder(Node* root) {
    vector<int> out;
    function<void(Node*)> dfs = [&](Node* node) {
        if (!node) return;
        for (auto* c : node->children) dfs(c);
        out.push_back(node->val);
    };
    dfs(root);
    return out;
}
Time: O(n) Space: O(h) recursion stack