二叉树的层序遍历(bfs)
?做题思路or感想:
- 利用队列来实现层序遍历
- 当明确每一层直接的元素不用区别对待时,其实代码中的size可以不写,但在这里要根据每一层来进行分组,所以要写size
- 当队列为空时,结束bfs
class Solution {
public:
vector> levelOrder(TreeNode* root) {
vector>result;
if (root == nullptr)return result; //防止奇怪测试用例
queueque;
que.push(root); //先放最开始的根节点
while (!que.empty()) {
int size = que.size(); //这里要根据每一层来分组,所以要用个size来区别每一层的节点
vectortemp;
for (; size; size--) {
//处理节点
auto t = que.front();
temp.push_back(t->val);
//将符合条件的节点加入队列中
if (t->left)que.push(t->left);
if (t->right)que.push(t->right);
que.pop(); //当一个节点利用完后,就可以弹出了
}
result.push_back(temp);
}
return result;
}
};