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

news/2024/6/29 12:02:10 标签: c++, 宽度优先, 算法

广度优先搜索(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;
 }

http://www.niftyadmin.cn/n/296520.html

相关文章

《机器学习算法竞赛实战》-chapter6模型融合

模型融合 模型融合常常是竞赛取得胜利的关键&#xff01; 具有差异性的模型融合往往能给结果带来很大的提升。虽然并不是每次使用模型融合都能起到很大的作用&#xff0c;但是就平常的竞赛经验而言&#xff0c;尤其是在最终成绩相差不大的情况下&#xff0c;模型融合的方法往往…

图像识别的应用与实践

随着计算机视觉技术的发展&#xff0c;图像识别技术已经成为了一个热门话题。图像识别是指将图像中的信息转换为可以被计算机理解和处理的形式&#xff0c;从而实现图像的自动分析和处理。下面&#xff0c;我们就来看看如何进行图像识别。 一、图像识别技术的分类 根据图像识别…

Go语言面试题--进阶提升(2)

文章目录 1.下面这段代码输出什么&#xff1f;2.下面代码输出什么&#xff1f;3.下面哪一行代码会编译出错&#xff0c;请说明。4.下面代码输出什么&#xff1f;5.下面选项正确的是&#xff1f;6.下面的代码输出什么&#xff1f; 1.下面这段代码输出什么&#xff1f; func mai…

100+Python挑战性编程练习系列 -- day 7

Question 20 定义一个类&#xff0c;它有一个生成器&#xff0c;可以迭代给定范围0和n之间的可被7整除的数字。 假设向程序提供以下输入&#xff1a; 7 然后&#xff0c;输出应为&#xff1a; 0 7 14 方法1&#xff1a; class MyGen():def by_seven(self, n):for i in range(0…

Excel 2003 函数应用完全手册

Excel 2003 函数应用完全手册 二〇〇四年二月二日 目 录 一、函数应用基础… 1 (一)函数和公式… 1 1.什么是函数……… 1 2.什么是公式……… 1 (二)函数的参数… 1 1.常量……… 1 2.逻辑值……… 1 3.数组……… 1 4.错误值……… 1 5.单元格引用……… 1 6.嵌套函数………

Simulink 自动代码生成电机控制:开发板DAC接口辅助调试的方法

目录 前言 DAC基本原理 PWM模拟DAC DAC底层代码配置 DAC调试演示 总结 前言 DAC是比较常用的数字转模拟单元&#xff0c;通过给定数字量&#xff0c;输出一个模拟信号&#xff0c;有比较广泛的用途&#xff0c;在这里只讨论DAC作为一个调式手段帮助打印出电机控制里面的一…

密码学【java】初探究之springboo集成mybatis,swagger,数字签名

文章目录 项目环境一 swagger技术的补充1.1 [swagger](&#xff08;https://github.com/OAI/OpenAPI-Specification&#xff09;)介绍1.2 swagger的基础注解1.3 controller添加swagger注解 二 项目搭建2.1 创建数据库2.2 引入项目依赖2.3 配置数据库的连接2.4 配置swagger的配置…

vue中v-if和v-show的区别和使用场景

问题&#xff1a;v-if和v-show我们都经常用来控制某一部分内容的显示与隐藏&#xff0c;那么其具体区别是什么呢&#xff1f; 1.v-if v-if是通过增添和删除DOM来控制元素的显示与隐藏的 当判断值为true时在DOM树中加入该DOM元素当判断值为false时在DOM树中删除该DOM元素 2.v-s…