N-ary Tree Preorder Traversal

easy tree dfs

Problem

Given the root of an n-ary tree, return the preorder traversal of its nodes' values — visit the root, then recurse into each child left-to-right.

Inputroot = [1, null, 3, 2, 4, null, 5, 6] // level-order with null separators
Output[1, 3, 5, 6, 2, 4]
Each child list is exhausted before moving to the next sibling.

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