590.N-ary Tree Postorder Traversal¶
Tags: Easy
Tree
Links: https://leetcode.com/problems/n-ary-tree-postorder-traversal/
Given an n-ary tree, return the postorder 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).
Follow up:
Recursive solution is trivial, could you do it iteratively?
Example 1:
Input: root = [1,null,3,2,4,null,5,6]
Output: [5,6,3,2,4,1]
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: [2,6,14,11,7,3,12,8,4,13,9,10,5,1]
Constraints:
- The height of the n-ary tree is less than or equal to
1000
- The total number of nodes is between
[0, 10^4]
递归解法:
/*
// 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> postorder(Node* root) {
vector<int> res;
if (!root) return res;
postorder(root, res);
return res;
}
void postorder(Node * root, vector<int> & res) {
for (auto e : root -> children) {
if (e) postorder(e, res);
}
res.push_back(root -> val);
}
};
Runtime: 68 ms, faster than 93.40% of C++ online submissions for N-ary Tree Postorder Traversal.
Memory Usage: 56.8 MB, less than 20.00% of C++ online submissions for N-ary Tree Postorder Traversal.
使用辅助栈的非递归解法:
/*
// 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> postorder(Node* root) {
vector<int> res;
if (!root) return res;
stack<Node *> s;
s.push(root);
while (!s.empty()) {
Node *p = s.top();
s.pop();
res.push_back(p -> val);
for (auto e : p -> children) {
if (e) s.push(e);
}
}
reverse(res.begin(), res.end());
return res;
}
};
Runtime: 72 ms, faster than 91.74% of C++ online submissions for N-ary Tree Postorder Traversal.
Memory Usage: 56.7 MB, less than 20.00% of C++ online submissions for N-ary Tree Postorder Traversal.
比较耗时间的步骤是数组翻转的步骤。