0%

590. N-ary Tree Postorder Traversal

dfs O(n) time O(h) space

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
// 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) {
dfs(root);
return res;
}

void dfs(Node *u) {
if (!u) return;
for (auto v : u->children) {
dfs(v);
}
res.push_back(u->val);
}

vector<int> res;
};

iterative

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
// 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;
stack<pair<Node *, bool>> s;
s.emplace(root, false);
while (!empty(s)) {
auto [u, visited] = s.top(); s.pop();
if (!u) continue;
if (visited) {
res.push_back(u->val);
continue;
}
s.emplace(u, true);
for (auto it = rbegin(u->children); it != rend(u->children); ++it) {
s.emplace(*it, false);
}
}
return res;
}
};