一、基本模板
void bfs(TreeNode* root, vector<vector<int>> &result, queue<TreeNode*> &q) {
if(root == NULL) { //判空
return;
}
q.push(root);
while(!q.empty()) { //队列作为条件条件进行循环
TreeNode* node = q.front();
q.pop();
if(node->left != NULL){
q.push(node->left);
}
if(node->right != NULL){
q.push(node->right);
}
}
}
二、常见写法举例
LeetCode 102. 二叉树的层次遍历
void bfs(TreeNode* root, vector<vector<int>> &result, queue<TreeNode*> &q) {
if(root == NULL) {
return;
}
queue<int> dep; //层
q.push(root);
dep.push(0);
while(!q.empty()) {
TreeNode* node = q.front();
q.pop();
int d = dep.front();
dep.pop();
if(d == result.size()) {
result.emplace_back();
}
result[d].push_back(node->val);
if(node->left != NULL){
q.push(node->left);
dep.push(d + 1);
}
if(node->right != NULL){
q.push(node->right);
dep.push(d + 1);
}
}
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode*> q;
bfs(root, result, q);
return result;
}