一、深度优先搜索的便历
深度优先搜索(Depth First Search,DFS)是一种用于遍历或搜索树或图的算法。它从起始节点开始,沿着一条路径一直遍历到最深处,然后回溯到上一个节点,再继续遍历下一条路径,直到遍历完所有节点。
这有一张图:
深度优先搜索,大概意思就是沿着一条路,把这个路径上面的所有数字搜索出来。
深度优先搜索需要借助栈来辅助遍历。
而栈的特点就是先进后出。
遍历也分为三种方式:分别是前序遍历、中序遍历和后序遍历。前中后的命名是根据根节点的遍历顺序来决定的。前序遍历就是先中间,再左边,最后右边。碰到叶子节点或者该节点没有子节点可便历时方可出栈。
后序遍历:首先根节点1入栈,判断该节点是否有子节点,若有,则节点2入栈,判断节点2是否有子节点,若有,5入栈,判断节点5是否有子节点,没有,5出栈,再次判断2是否有其他节点,有,6进栈,判断6是否有子节点,没有,6出栈,然后返回结点2,判断是否还有节点,没有,2出栈,判断1是否有其他节点,有,3进栈........以此类推,中序便历的结果为:56278391
二、广度优先搜索的一种遍历方式
同样是这张图:
广度优先搜索使用队列来管理待访问的节点,首先将起始节点加入队列,然后从队列中取出一个节点进行访问,将其未访问过的相邻节点加入队列。然后再从队列中取出下一个节点进行访问,重复上述过程,直到队列为空。
遍历:首先节点1进入队列,判断队列是否为空,判断节点1是否有子节点,此时队列不为空,节点1出队列。接下来节点1的3个子节点进入队列分别为234。判断此时队列是否为空,判断每个节点是否有子节点。节点二出队列,节点二有两个子节点,此时二的两个子节点五和六进入队列,判断此时队列是否为空,判断节点三是否有子节点,3出队列,三的子节点七和八进入队列,判断队列是否为空,判断节点四是否有子节点,4的 一个子节点9进入队列。此时队列中有56789判断队列是否为空并逐个判断是否有子节点然后逐个输出。最后结果为:123456789
以上内容仅个人纪录学习过程