[LeetCode April Challange] Day 20 - N-ary Tree Preorder Traversal
Given the root of an n-ary tree, return the preorder traversal of its nodes’ values.
Nary-Tree input serialization is represented in their level order traversal. Each group of children is separated by the null value (See examples)
Example 1:
Input: root = [1,null,3,2,4,null,5,6]
Output: [1,3,5,6,2,4]
Example 2:
Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: [1,2,3,6,7,11,14,4,8,12,5,9,13,10]
Constraints:
- The number of nodes in the tree is in the range [0, 10^4].
- 0 <= Node.val <= 10^4
- The height of the n-ary tree is less than or equal to 1000.
Follow up: Recursive solution is trivial, could you do it iteratively?
Solution
Recursion
Time complexity : O(n)
Space complexity : O(n)
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> preorder(Node* root) {
ans = {};
dfs(root);
return ans;
}
private:
vector<int> ans;
void dfs(Node *node) {
if (node == nullptr) return;
ans.push_back(node->val);
for (Node *c: node->children) {
if (c == nullptr) continue;
dfs(c);
}
}
};
Iteration
Time complexity : O(n) Space complexity : O(n)
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int> ans = {};
stack<Node*> stk;
stk.push(root);
while (!stk.empty()) {
Node *curr = stk.top(); stk.pop();
if (curr == nullptr) continue;
ans.push_back(curr->val);
for (int i=curr->children.size()-1; 0<=i; --i)
stk.push(curr->children[i]);
}
return ans;
}
};