C++ 广度优先搜索,搜索二叉树,并且打印

文章介绍了广度优先搜索(BFS)的基本概念,即按照层次顺序遍历图。接着,提供了一个使用C++语言实现BFS的示例,通过静态数组构建二叉树,并利用队列进行节点的访问和遍历。代码中展示了如何插入新节点、构建树以及执行BFS的过程。
摘要由CSDN通过智能技术生成

广度优先搜索(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;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值