Leetcode590. N-ary Tree Postorder Traversal
Leetcode590. N-ary Tree Postorder Traversal
和589类似,注意孩子节点的入栈顺序即可
代码如下:
/*
// 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) {
/*
* Recursion
* Runtime: 44 ms, 58.50%
* Memory Usage: 11.2 MB, 100.00%
*/
postorder_recur(root);
return ret_recur;
}
vector<int> postorder_iter(Node* root) {
/*
* Iteration
* Runtime: 36 ms, 95.19%
* Memory Usage: 11.1 MB, 100.00%
*/
vector<int> ret_iter;
if (root == NULL) return ret_iter;
stack<Node*> st;
st.push(root);
while (!st.empty()) {
Node* cur = st.top(); st.pop();
ret_iter.push_back(cur->val);
for (auto child : cur->children)
st.push(child);
}
reverse(ret_iter.begin(), ret_iter.end());
return ret_iter;
}
private:
vector<int> ret_recur;
void postorder_recur(Node* root) {
if (root == NULL) return;
for (auto child : root->children)
postorder_recur(child);
ret_recur.push_back(root->val);
}
};