BFS,其英文全称是Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。目的是系统地展开并检查图中的所有节点,以找寻结果。
struct Node{
Node* left, * right;
int val;
Node():left(NULL), right(NULL){ }
};
void bfs(vector<int>& ans) {
queue<Node*> q;
ans.clear();
q.push(root);
while(!q.empty()) {
Node* u = q.front(); q.pop();
ans.push_back(u->val); //增加到输出序列尾部
if (u->left != NULL) q.push(u->left); //把左子节点(如果有)放进队列
if (u->right != NULL) q.push(u->right); //把右子节点(如果有)放进队列
}
}
可以使用队列实现二叉树的层次遍历,这样遍历二叉树的方法称为宽度优先搜索