Skip to content

Intuition

When solving the problem of performing a postorder traversal on an N-ary tree, the key observation is that postorder means processing the children nodes before the parent node. This suggests a recursive approach where we first traverse all the children of a node before adding the node's value to the result list.

Approach

The approach involves a depth-first search (DFS) strategy: 1. Start from the root node. 2. For each node, recursively perform a postorder traversal on all its children. 3. After all children have been processed, add the node's value to the result list. 4. Return the result list after processing all nodes.

This approach naturally lends itself to a recursive implementation.

Complexity

  • Time complexity: The time complexity is O(n), where n is the total number of nodes in the tree. This is because each node is visited exactly once during the traversal.

  • Space complexity: The space complexity is O(h), where h is the height of the tree. This space is required for the recursion stack in the worst case, where h can be as large as n in the case of a skewed tree.

Code

```java /* // Definition for a Node. class Node { public int val; public List children;

public Node() {}

public Node(int _val) {
    val = _val;
}

public Node(int _val, List<Node> _children) {
    val = _val;
    children = _children;
}

}; */

class Solution { public List postorder(Node root) { List result = new ArrayList<>(); dfs(root, result); return result; }

private void dfs(Node root, List<Integer> result) {
    if (root == null) {
        return;
    }

    for (Node child : root.children) {
        dfs(child, result);
    }
    result.add(root.val);
}

}