怎么记忆
今天整理关于深度优先遍历和广度优先遍历的笔记,这两种遍历方法我通过类比二叉树的先序遍历和层次遍历来记忆,二叉树的这两种方法我将在后续的笔记整理中详细介绍。
二叉树的线序遍历
二叉树的先序遍历是指先访问根节点,再访问左子树和右子树,若左子树有左右子树,则递归调用重复上述过程。直到访问完所有结点,则结束调用。
深度优先搜索(DFS)
与先序遍历类似,从根节点开始往下遍历,选择最深的路径进行搜索,将要进行结点存入栈中,不需要遍历的结点则从栈中弹出。
如下无向图:
从A开始搜索,A相连且未被遍历的有B和C,选择B继续填入栈中
接着将C填入栈中,
由于与C相连的B已经被遍历过,因此C不存在相连且未被遍历的点,则弹出C
再遍历B,按以上步骤,则D未被遍历,则将D入栈
E、A按以上步骤,可依次类推,最终F无相连未遍历的结点,则弹出F,最终遍历完成。
则上图的深度遍历序列为ABCDEF
二叉树的层次遍历
层次遍历相对简单,将每一层的结点从上到下、从左到右访问,直到访问完所有结点。
广度优先搜索(BFS)
广度优先搜索从选定的一个结点开始,不断地往下层遍历,直到搜索到目标结点。
例如:
A入队,以及将与A相邻的BD元素入队,此时队列元素为ABD
A遍历完成,将A出队,遍历B和D,首先遍历B,与B相邻的CE入队,队列元素为BDCE
B完成遍历,将B出队,此时与D唯一相邻的E也访问了,因此D也出队
CE重复上述步骤,直到访问完所有结点
序列为ABDCEF
发现数据结构通过图片来理解会比看文字和代码更容易,利用图片理解了基本思路之后就可以开始写代码加深印象和理解。在后面我会整理一些平时的代码作业及笔记,有问题欢迎指出,感谢。