方法一:使用宽度遍历(BFS)非递归使用队列
遇到问题:1、queue队列使用push,pop进行压入与弹出,同时注意压入弹出的数据类型,可能是指针类型注意加*,如下面代码段压入队列的为指针类型,以及之后需要调用赋值也需要注意指针类型
void level(Node* root, vector<vector<int>>* result){queue<Node*>orderqueue;orderqueue.push(root);Node* head;head=orderqueue.front();}
2、指针所对应的模板函数调用应该使用->
3、使用auto进行遍历for(auto&i:head->children)
/*// Definition for a Node.class Node {public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}};*/class Solution {public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>>result;level(root,&result);return result;}public:void level(Node* root, vector<vector<int>>* result){if(root==NULL){return;}queue<Node*>orderqueue;orderqueue.push(root);Node* head;while(!orderqueue.empty()){int s=orderqueue.size();vector<int>result1;while(s--){head=orderqueue.front();orderqueue.pop();result1.push_back(head->val);for(auto&i:head->children){orderqueue.push(i);}}result->push_back(result1);result1.clear();}}};
方法二:使用深度遍历(DFS)递归方法
遇到问题:1、对应vertor
vector<vector<int>>result;result.emplace_back();
2、调用函数时使用引用方式可能减少很多麻烦
class Solution {public:vector<vector<int>> levelOrder(Node* root) {perorder(root,0,result);return result;}void perorder(Node* root, int d, vector<vector<int>>& result){if(root==NULL){return;}if(result.size()==d){result.emplace_back();}result[d].push_back(root->val);for(auto& i:root->children){perorder(i,d+1,result);}}vector<vector<int>>result;};
