Leetcode589. N-ary Tree Preorder Traversal
Leetcode589. N-ary Tree Preorder Traversal
递归与非递归(DFS):
/*
// 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) {
/*
* Recursion
* Runtime: 40 ms, 82.67%
* Memory Usage: 11.3 MB, 100.00%
*/
preorder_recur(root);
return pre;
}
vector<int> preorder_iter(Node* root) {
/*
* Iteration
* Runtime: 36 ms, 94.91%
* Memory Usage: 11.3 MB, 100.00%
*/
vector<int> v;
if (root == NULL) return v;
stack<Node*> s;
s.push(root);
while (!s.empty()) {
Node* n = s.top(); s.pop();
if (n != NULL)
v.push_back(n->val);
for(auto it = n->children.crbegin(); it != n->children.crend(); ++it)
s.push(*it);
}
return v;
}
private:
vector<int> pre;
void preorder_recur(Node* root) {
if (root == NULL) return;
pre.push_back(root->val);
for (auto child : root->children)
preorder_recur(child);
}
};
注意非递归版本需要倒序添加子孩子