N-ary Tree Preorder and Postorder Traversal
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
← Previous
Construct Quad Tree