由BFS得到的层序结果是一个一位数组,而我们要得到二维数组,则需要:
在每一层遍历开始前,先记录队列中的
结点数量 n(也就是这一层的结点数量),然后一口气处理完这一层的 n 个结点。
在while循环的每一轮,都是将当前层的结点全部出队,再将下一层的所有结点入队,就实现了层次遍历
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<vector<int>> levelOrder(TreeNode* root) { 13 vector<vector<int> > res; 14 if(!root) return res; 15 queue<TreeNode*> q; 16 q.push(root);//根节点入队 17 while(!q.empty()){ 18 vector<int> tmp; 19 int curSize=q.size();//记录当前队列里元素个数 20 for(int i=0;i<curSize;i++){//处理当前层所有节点 21 TreeNode* node=q.front(); 22 q.pop(); 23 tmp.push_back(node->val); 24 if(node->left) q.push(node->left);//下一层的节点加入 25 if(node->right) q.push(node->right); 26 } 27 res.push_back(tmp);//处理完一层就将tmp加入res中 28 } 29 return res; 30 } 31 };