广度优先搜索(BFS)
什么是广度优先搜索
广度优先搜索就是层序遍历,一层一层的搜索整个图
BFS的代码实现
使用数组实现静态的二叉树,树的结构如下显示
代码如下显示
#include "stdio.h"
#include "queue"
using namespace std;
const int N=100005;
//静态数组的节点
struct Node{
char value;
int lson,rson;
}tree[N];
//下标
int index=1;
//得到一个新的节点
int newNode(char value){
tree[index].value=value;
tree[index].lson=0;
tree[index].rson=0;
return index++;
}
//插入一个新的节点
void insertNode(int &father,int child,int l_r){
if(l_r==0){
tree[father].lson=child;
}else{
tree[father].rson=child;
}
}
//构建一颗树
int buildTree(){
int A= newNode('A');
int B= newNode('B');
int C= newNode('C');
int D= newNode('D');
int E= newNode('E');
int F= newNode('F');
int G= newNode('G');
int H= newNode('H');
int I= newNode('I');
insertNode(E,B,0);
insertNode(E,G,1);
insertNode(B,A,0);
insertNode(B,D,1);
insertNode(G,F,0);
insertNode(G,I,1);
insertNode(D,C,0);
insertNode(I,H,0);
return E;
}
int main(){
// 生成这个树,得到这个树的根节点
int root=buildTree();
// 队列
queue<int> q;
// 把根节点放在队列的后面
q.push(root);
// 如果队列不为空
while (q.size()){
// 得到前面的节点
int tmp=q.front();
// 打印这个节点
printf("%c\t",tree[tmp].value);
// 这个节点已经使用过了,直接丢弃
q.pop();
// 如果tmp这个节点的子节点不为空,将这些子节点添加到队列的尾部
if(tree[tmp].rson!=0)q.push(tree[tmp].rson);
if(tree[tmp].lson!=0)q.push(tree[tmp].lson);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)