N-ary Tree Preorder Traversal
题目描述:
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
解题思路:和二叉树的前序遍历思想是一样的,可以使用递归和非递归两种方法,唯一不同之处就在于孩子可以是多个,再者就是前序非递归的方法,要从右往左进栈。
/*递归
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int>result;
pre_order(root,result);
return result;
}
void pre_order(Node* root,vector<int>&result){
if(!root)return;
result.push_back(root->val);
for(int i=0;i<root->children.size();i++){
pre_order(root->children[i],result);
}
}
};
*/
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int>result;
if(!root)return result;
stack<Node*>node;
Node* p;
node.push(root);
while(!node.empty()){
p=node.top();
result.push_back(p->val);
node.pop();
for(int i=p->children.size()-1;i>=0;i--){
node.push(p->children[i]);
}
}
return result;
}
};