哈喽大家好,这里是蒟蒻hanyiyang的博文,今天,我来给大家,介绍一个关于图的算法,希望能帮助到大家!!!
层次遍历
大家来看一看上面这个图,为什么要说这是层次遍历呢,因为,这种遍历方式是一层一层进行的:
第一层:F
第二层:CE
第三层:ADHG
第四层:BM
这个就是层次遍历的大致顺序
那么算法是怎样的呢???
- 先将根节点入队
- 只要队列不为空,只要队首元素有左儿子且左儿子没有被访问过,就将左儿子入队,同理,只要队首元素有右儿子且右儿子没有被访问过,就将右儿子入队。
- 将算法第2条执行完了以后,将队首元素弹出并输出。
这就是大致代码的实现
我们再来将上面的图根据算法再执行一遍
1.先将根节点F入队
2.将F的左右儿子CE入队
3.将F出队并输出
输出:F
4.将C的左右儿子AD入队,并将C出队输出
输出:F C
5.将E的左右儿子HG入队,并将E出队输出
输出:F C E
6.因A为叶子节点,则直接出队输出
输出:F C E A
7.将D的左儿子B入队,并将D出队输出
输出:F C E A D
8.因为H是叶子节点,所以直接将此出队输出
输出:F C E A D H
9.将G的左儿子入队,并将G出队输出
输出:F C E A D H G
10.因为B M都为叶子节点,所以直接出队输出,此时队列为空
输出:F C E A D H G B M
以上是层次遍历的大致过程,具体代码实现如下
struct node
{
int data;
int