Recursive:
Java:
class Solution {
public List<Integer> list = new ArrayList<>();
public List<Integer> preorder(Node root) {
if (root == null)
return list;
list.add(root.val);
for(Node node: root.children)
preorder(node);
return list;
}
}
// https://leetcode.com/problems/n-ary-tree-preorder-traversal/discuss/147955/Java-Iterative-and-Recursive-Solutions
C++:
class Solution {
private:
void travel(Node* root, vector<int>& result) {
if (root == nullptr) {
return;
}
result.push_back(root -> val);
for (Node* child : root -> children) {
travel(child, result);
}
}
public:
vector<int> preorder(Node* root) {
vector<int> result;
travel(root, result);
return result;
}
};
// https://leetcode.com/problems/n-ary-tree-preorder-traversal/discuss/149093/C%2B%2B-44ms-beats-100-both-iterative-and-recursive
Iterative:
add the same level from right to the left and save the children of the left most node
Java:
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> list = new ArrayList<>();
if (root == null) return list;
Stack<Node> stack = new Stack<>();
stack.add(root);
while (!stack.empty()) {
root = stack.pop();
list.add(root.val);
for (int i = root.children.size() - 1; i >= 0; i--)
stack.add(root.children.get(i));
}
return list;
}
}
// https://leetcode.com/problems/n-ary-tree-preorder-traversal/discuss/147955/Java-Iterative-and-Recursive-Solutions
C++:
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int> result;
if (root == nullptr) {
return result;
}
stack<Node*> stk;
stk.push(root);
while (!stk.empty()) {
Node* cur = stk.top();
stk.pop();
result.push_back(cur -> val);
for (int i = cur -> children.size() - 1; i >= 0; i--) {
if (cur -> children[i] != nullptr) {
stk.push(cur -> children[i]);
}
}
}
return result;
}
};
// https://leetcode.com/problems/n-ary-tree-preorder-traversal/discuss/149093/C%2B%2B-44ms-beats-100-both-iterative-and-recursive
Python:
q += [child for child in node.children[::-1] if child]
class Solution(object):
def preorder(self, root):
ret, q = [], root and [root]
while q:
node = q.pop()
ret.append(node.val)
q += [child for child in node.children[::-1] if child]
return ret
# https://leetcode.com/problems/n-ary-tree-preorder-traversal/discuss/148867/Python-short-iterative-solution-beats-100-66-ms-faster-than-fastest-!