二叉树的层序遍历(队列+BFS)

由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 };
原文地址:https://www.cnblogs.com/nilbook/p/13773985.html