基础概念
核心思想:沿着图的每条分支尽可能深入地进行搜索,直到不能再继续,然后回溯到最近的分支点再继续搜索
步骤:
- 从起始节点开始
- 标记当前节点为已访问
- 对于当前节点的每一个未访问过的邻居节点,递归地进行深度优先搜索
- 如果所有邻居节点都已访问,回溯到上一个节点,继续搜索
分析:
- 时间复杂度: O(V+E),其中 V 是节点数,E 是边数,因为每个节点和边都会被访问一次
- 空间复杂度: O(V),因为递归栈的深度可能会达到节点数
深度优先遍历的两种实现方式
- 递归:递归边界就是死胡同。比如二叉树先序遍历
- 迭代:转化为一系列的入栈、出栈操作。要求记录每一层递归式里路径的状态,此时就会强依赖栈结构
实现代码