590. N-ary Tree Postorder Traversal
题目
Given an n-ary tree, return the postorder traversal of its nodes’ values.
For example, given a 3-ary
tree:
Return its postorder traversal as: [5,6,3,2,4,1]
.
解决
设一共有n
个节点。
后序遍历的递归过程:
- 从左至右依次遍历所有子树
- 访问根节点
1.递归
- 时间复杂度:O(n)
- 空间复杂度:O(n)
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> postorder(Node* root) {
vector<int> result;
traversal(root, result);
return result;
}
void traversal(Node* root, vector<int> & num) {
if (!root) return;
for (auto n : root->children) {
traversal(n, num);
}
num.push_back(root->val);
}
};
2.非递归
- 时间复杂度:O(n)
- 空间复杂度:O(n)
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> postorder(Node* root) {
vector<int> result;
stack<Node*> tree;
if (!root) return result;
tree.push(root);
while (!tree.empty()) {
Node* temp = tree.top();
tree.pop();
for (auto node : temp->children) {
tree.push(node);
}
result.push_back(temp->val);
}
reverse(result.begin(), result.end());
return result;
}
};