方法一:使用宽度遍历(BFS)非递归使用队列
    遇到问题:1、queue队列使用push,pop进行压入与弹出,同时注意压入弹出的数据类型,可能是指针类型注意加*,如下面代码段压入队列的为指针类型,以及之后需要调用赋值也需要注意指针类型

    1. void level(Node* root, vector<vector<int>>* result){
    2. queue<Node*>orderqueue;
    3. orderqueue.push(root);
    4. Node* head;
    5. head=orderqueue.front();
    6. }

    2、指针所对应的模板函数调用应该使用->
    3、使用auto进行遍历for(auto&i:head->children)

    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<vector<int>> levelOrder(Node* root) {
    20. vector<vector<int>>result;
    21. level(root,&result);
    22. return result;
    23. }
    24. public:
    25. void level(Node* root, vector<vector<int>>* result)
    26. {
    27. if(root==NULL){
    28. return;
    29. }
    30. queue<Node*>orderqueue;
    31. orderqueue.push(root);
    32. Node* head;
    33. while(!orderqueue.empty())
    34. {
    35. int s=orderqueue.size();
    36. vector<int>result1;
    37. while(s--){
    38. head=orderqueue.front();
    39. orderqueue.pop();
    40. result1.push_back(head->val);
    41. for(auto&i:head->children){
    42. orderqueue.push(i);
    43. }
    44. }
    45. result->push_back(result1);
    46. result1.clear();
    47. }
    48. }
    49. };

    方法二:使用深度遍历(DFS)递归方法
    遇到问题:1、对应vertor>数据类型在存放时需要申请空元素占位,注意学习该元素的压入数据方式

    1. vector<vector<int>>result;
    2. result.emplace_back();

    2、调用函数时使用引用方式可能减少很多麻烦

    1. class Solution {
    2. public:
    3. vector<vector<int>> levelOrder(Node* root) {
    4. perorder(root,0,result);
    5. return result;
    6. }
    7. void perorder(Node* root, int d, vector<vector<int>>& result){
    8. if(root==NULL){
    9. return;
    10. }
    11. if(result.size()==d){
    12. result.emplace_back();
    13. }
    14. result[d].push_back(root->val);
    15. for(auto& i:root->children){
    16. perorder(i,d+1,result);
    17. }
    18. }
    19. vector<vector<int>>result;
    20. };