1. 思路
没啥思路,就是一个宽度优先搜索,一层一层搜即可。
bfs 主要是利用队列来做。
先把root 放到队列中,然后进循环。
每次循环把当前队列的所有元素取出来,加到当前层,然后将他们的左子树,右子树加到队列中去,当前层计算完了以后加到res 里面去。用c++写起来很简洁,个人感觉比java简洁一些。
2. code
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root== nullptr){
return res;
}
queue<TreeNode*> q;
// 放入队列
q.push(root);
while (!q.empty()){
// auto f = q.front();
// q.pop();
// 层次遍历
vector<int> level;
int curSize = q.size();
for (int i = 0; i < curSize; ++i) {
auto t = q.front();
q.pop();
level.push_back(t->val);
if (t->left){
q.push(t->left);
}
if (t->right){
q.push(t->right);
}
}
res.push_back(level);
}
return res;
}
};
3. 小总结
c++的语法有点奇怪,
// 这样是不行的
queue<*TreeNode>
// 必须写出
queue<TreeNode*> ,
队列存放TreeNode指针。我一开始是写成queue
还有一个坑点是 每次循环的时候需要把queue.size赋给一个遍历,因为循环里面会进行pop操作,这样size就会变化。