# 589.N Ary Tree Preorder Traversal

**589.N Ary Tree Preorder Traversal**

难度:Easy

> 给定一个 N 叉树，返回其节点值的前序遍历。

例如，给定一个 3叉树 : ![](https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/10/12/narytreeexample.png) 返回其前序遍历: \[1,3,5,6,2,4]。

代码如下：

* 递归版本:

```
/*
// 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> preorder(Node* root) {
        vector<int >res;
        if(!root) return res;
        res.push_back(root->val);
        for(auto i:root->children)
        {
            vector<int>tmp=preorder(i);
            res.insert(res.end(),tmp.begin(),tmp.end());
            }   
        return res;
    }
};
```

* 迭代版本:

```
/*
// 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> preorder(Node* root) {
        vector<int>res;
        if(!root) return res;
        stack<Node*>pt;
        pt.push(root);
        res.push_back(root->val);
        while(!pt.empty())
        {
            if(pt.top()->children.empty())
            {
                pt.pop();
                if(!pt.empty()) pt.top()->children.erase(pt.top()->children.begin());
            }
            else{
                
                pt.push(pt.top()->children[0]);
                res.push_back(pt.top()->val);
            }
        }
        return res;
    }
};
```
