给定一个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