方法一:递归方法与429题递归方法一致遍历顺序一致,只是429题通过层数d将所遍历的数放入了不同层

    1. /*
    2. // Definition for a Node.
    3. class Node {
    4. public:
    5. int val;
    6. vector<Node*> children;
    7. Node() {}
    8. Node(int _val) {
    9. val = _val;
    10. }
    11. Node(int _val, vector<Node*> _children) {
    12. val = _val;
    13. children = _children;
    14. }
    15. };
    16. */
    17. class Solution {
    18. public:
    19. vector<int> preorder(Node* root) {
    20. if(root==NULL){
    21. return result;
    22. }
    23. result.push_back(root->val);
    24. for(auto&it:root->children){
    25. preorder(it);
    26. }
    27. return result;
    28. }
    29. vector<int>result;
    30. };

    方法二:使用迭代的方法,emplace() 函数的功能是可以直接将参数传给对象的构造函数,新增加了emplace() 函数和 emplace_back() 函数,用来实现insert() 函数和 push_back() 函数的功能

    1. class Solution {
    2. public:
    3. vector<int> preorder(Node* root) {
    4. if(root==NULL){
    5. return result;
    6. }
    7. Node* head;
    8. s1.push(root);
    9. while(!s1.empty()){
    10. head=s1.top();
    11. s1.pop();
    12. result.push_back(head->val);
    13. for(auto it=head->children.rbegin();it!=head->children.rend();it++){//c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素
    14. //c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置
    15. s1.emplace(*it);//这里需要解引用是因为it指向的是指向children指针
    16. }
    17. }
    18. return result;
    19. }
    20. vector<int>result;
    21. stack<Node*>s1;
    22. };