解题思路:
- 本题要求按照层来遍历,想到BFS采用的思路正是和二叉树层次遍历一样,采用队列来优先管理每层结点,然后遍历该层所有结点
- 注意:
1.遍历结束标志
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if (!root) {
return res;
}
// 创建一个双端队列
queue<TreeNode*>q;
q.push(root);
// 判断队列是否为空
while(!q.empty()){
// 获取当前层元素的个数
int currsize = q.size();
// 先创建一个空的一维数组来存储该层的所有元素
res.push_back({});
// 按照当前层的元素个数来遍历
for(int i = 0;i<currsize;++i){
// 获取队列头元素
TreeNode* temp = q.front();
// 移除队列头元素
q.pop();
// 将元素压入结果
res.back().push_back(temp->val);
// 将符合条件的下一层所有元素压入队列中
if(temp->left)q.push(temp->left);
if(temp->right)q.push(temp->right);
}
}
return res;
}
};