二叉树的广度优先搜索
来源:互联网 发布:夏米尔火花机简单编程 编辑:程序博客网 时间:2024/05/19 05:30
(一)基本思想
使用两个队列存放节点元素,队列1用来存放未遍历过的节点,队列2用来存放遍历的节点。
具体步骤:
步骤:
(1)把根结点,放到队列1中。见图(a)
(2)弹出队列1的中的队首元素,被弹出的元素放到队列2中。若该队首元素有子节点,按从到右的顺序加入到队列1中。见图(b)
(3)重复步骤2),见图(c)~图(h)
(4)整个过程结束。队列2中的元素顺序就是使用广度优先搜索方法所遍历的顺序。
(二)C++代码实现
#include <iostream>#include <queue>using namespace std;struct node{ int data; node *left; node *right;};void bfs(int a[], int size){ queue<node *> visited, unvisited; node nodes[size]; node *current; // 构建二叉树 for(int i = 0; i < size; i++) { nodes[i].data = a[i]; // 左子节点 int child = 2 * i + 1; if(child < size) { nodes[i].left = &nodes[child]; } else { nodes[i].left = NULL; } // 右子节点 child++; if(child < size) { nodes[i].right = &nodes[child]; } else { nodes[i].right = NULL; } } // 先把第0个节点加到unvisited队列中 unvisited.push(&nodes[0]); while (!unvisited.empty()) { current = unvisited.front(); unvisited.pop(); if(NULL != current->left) { unvisited.push(current->left); } if(NULL != current->right) { unvisited.push(current->right); } visited.push(current); cout << current->data << " "; }}int main(int argc, const char * argv[]){ int a[] = {0, 1, 2, 3, 4, 5, 6}; int size = sizeof(a)/sizeof(int); bfs(a, size); return 0;}
运行结果:
0 1 2 3 4 5 6
阅读全文
1 0
- 二叉树的广度优先搜索
- 二叉搜索树的广度优先遍历
- 二叉树的深度优先搜索和广度优先搜索
- 广度优先搜索二叉树
- 二叉树的最小深度——广度优先搜索
- 二叉树的深度和广度优先搜索
- 深度优先搜索算法和广度优先搜索算法的搜索次序(二叉树)
- 二叉树的广度优先遍历
- 二叉树的广度优先遍历
- 广度优先搜索二叉树,并返回节点深度
- 二叉树的层次遍历和图的广度优先搜索的相同点和不同点
- 广度优先搜索BFS之二叉树的构造及遍历
- 二叉树搜索树遍历--前序、中序、后序、深度优先、广度优先遍历的简单实现
- 二叉树 深度优先搜索(DFS)、广度优先搜索(BFS)
- 二叉树 深度优先搜索(DFS)、广度优先搜索(BFS)
- 二叉树深度优先搜索(DFS)、广度优先搜索(BFS)
- 二叉树 深度优先搜索(DFS)、广度优先搜索(BFS)
- 二叉树的深度优先和广度优先遍历
- 学习Linux-4.12内核网路协议栈(3.1)——网路层的收包处理
- 关于this和super关键字为什么不能再static方法中或者静态代码块中
- 记我和ACM的初遇
- 二叉树的深度优先搜索
- 配置 struts-2.3.dtd 但一直无法提示
- 二叉树的广度优先搜索
- 【POJ】2378
- 人类社会与其发展规律
- 文档流
- OpenCV练习1:使用自定义类实现视频和帧处理的接口
- 树莓派更新源
- 代码面试指南学习记录-第一章02
- Onethink上传服务器后登录不了的问题
- GDAL裁剪tif图(保留经纬度)