初识 二叉树和BFS(宽度优先遍历)

第一天
好吧,这是一个很基础的算法,也是我第一次认识算法。
废话少说
二叉树bfs初步理解
二叉树这个概念就是一个根最多有两片叶,还可有一片还可没有;
叶也可以当根;
那么排起来就是2的指数倍的增长;
高中数学我们就知道,这样的增长速度是非常快的;
因此,当我们建立一个树的时候,我们就可以用广度优先搜索的办法来搜索在树中想要的数据;
如何来做,首先我们要设置出一个节点(结构体),一是用它来存储数据,二是用它来链接,真正实现根和叶的概念。

struct Node()
{
int data;
Nodeleft;
Noderight;
bool have_fuzhi; * 这个变量就是来看这个结构体是否有过赋值的情况*
Node():left(NULL),right(NULL),have_fuzhi(false){}
}

我们设置完成结点这个结构体以后,就要先模拟一个根出来
Noderoot; 这一步至关重要啊,没有根就没有起点。
好,有了根,我们可以为它增加叶片,也就是生长出新的根。

Node newnode()
{
return new Node;
}

来写函数

bool addnode(int newdata,int fangxiang,Nodepos)
{	if(faxiang==0)  //0为左叶,1为右叶,不难理解,体会一下就好
{	if(pos->left!=NULL)
return false;
else
{
pos->left = newnode();  //申请新的空间给新的根或者说当前根的叶
pos =pos->left;
}
}
if(fangxiang==1)
{
if(pos->right!=NULL)
return false;
else
{
pos->left = newnode();
pos =pos->right;
}
}
pos->data = newdata;	//赋值
}

提前申请好数组一个,
用来存储从上到下,从左到右依次的数据,实现一层一层,从左到右的递归搜索。
把bfs最核心的写在这了。

bool bfs(vector& ans)
{
queue<Node>& q;
ans.clear();
q.push(root);
while(!q.empty())
{
Node*temp = q.front();q.pop();
if(!temp.have) return false;
if(temp->left!=NULL)
temp=temp->left;
if(temp->right!=NULL)
temp=temp->right;

}
}

这个是使用队列来实现的宽度有限遍历。
其实真的没什么难理解的,觉得要想掌握好bfs 还得做一些相应的题目,应对好各个题目的格式变换。
若有写的不对的地方,请告知我这枚菜鸟。
也可以和我一起学算法哟,欢迎
q1064732420

作者:壮志小青年
来源:CSDN
原文:https://blog.csdn.net/qq_43450892/article/details/88375236
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值