N-ary Tree Preorder and Postorder Traversal

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem

Return preorder (root, children) and postorder (children, root) traversals of an N-ary tree.

Solutions

# Python
def preorder(root):
    if not root:
        return []
    res = [root.val]
    for child in root.children:
        res.extend(preorder(child))
    return res

def postorder(root):
    if not root:
        return []
    res = []
    for child in root.children:
        res.extend(postorder(child))
    res.append(root.val)
    return res
// C++
vector<int> preorder(Node* root) {
    if (!root) return {};
    vector<int> res = {root->val};
    for (auto c : root->children) { auto sub = preorder(c); res.insert(res.end(), sub.begin(), sub.end()); }
    return res;
}
vector<int> postorder(Node* root) {
    if (!root) return {};
    vector<int> res;
    for (auto c : root->children) { auto sub = postorder(c); res.insert(res.end(), sub.begin(), sub.end()); }
    res.push_back(root->val);
    return res;
}
// Java
public List<Integer> preorder(Node root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) return res;
    res.add(root.val);
    for (Node c : root.children) res.addAll(preorder(c));
    return res;
}
public List<Integer> postorder(Node root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) return res;
    for (Node c : root.children) res.addAll(postorder(c));
    res.add(root.val);
    return res;
}
// JavaScript
function preorder(root) {
    if (!root) return [];
    return [root.val, ...root.children.flatMap(preorder)];
}
function postorder(root) {
    if (!root) return [];
    return [...root.children.flatMap(postorder), root.val];
}

Complexity

  • Time: O(n), Space: O(n)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro