给定一个N叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
返回其前序遍历: [1,3,5,6,2,4]。
说明: 递归法很简单,你可以使用迭代法完成此题吗?
1 /*
2 // Definition for a Node.
3 class Node {
4 public:
5 int val;
6 vector<Node*> children;
7
8 Node() {}
9
10 Node(int _val, vector<Node*> _children) {
11 val = _val;
12 children = _children;
13 }
14 };
15 */
方法一:栈
1 class Solution {
2 public:
3 vector<int> preorder(Node* root) {
4 vector< int > ans ;
5 stack <Node *> slist ;
6 if( root == NULL )
7 return ans ;
8 slist.push( root ) ;
9 while( slist.size() ){
10 Node *top = slist.top() ;
11 slist.pop();
12 ans.push_back( top->val ) ;
13 for( int i=top->children.size()-1;i>=0 ; i--){
14 slist.push(top->children[i]);
15 }
16 }
17 return ans ;
18 }
19 };
个人笔记:1.push_back在最后插入数据;
2.slist.top()取栈顶元素;
方法二:递归
1 class Solution {
2 public:
3 vector<int> preorder(Node* root) {
4 vector<int> ans;
5 if(!root)
6 return ans;
7 ans.push_back(root->val);
8
9 if(root->children.size())
10 {
11 for(int i=0;i<root->children.size();i++)
12 {
13 vector<int> temp=preorder(root->children[i]);
14 ans.insert(t.end(),temp.begin(),temp.end());
15 }
16 }
17 return ans;
18 }
19 };
来源:https://www.cnblogs.com/99xiaobei/p/9768753.html