797. 所有可能的路径 https://leetcode.cn/problems/all-paths-from-source-to-target
797. All Paths From Source to Target https://leetcode.com/problems/all-paths-from-source-to-target
一句话总结
图的遍历就是 多叉树遍历 的延伸。主要的遍历方式还是深度优先搜索(DFS)和广度优先搜索(BFS)。唯一的区别是,树结构中不存在环,而图结构中可能存在环,所以我们需要标记遍历过的节点,避免遍历函数在环中死循环。
具体来说,遍历图的所有「节点」时,需要 visited
数组在前序位置标记节点;遍历图的所有「路径」时,需要 onPath
数组在前序位置标记节点,在后序位置撤销标记。
如果题目说这幅图不存在环,那么图的遍历就完全等同于多叉树的遍历。
下面我来结合实例,具体解释上述总结。
深度优先搜索(DFS)
遍历所有节点(`visited` 数组)
遍历所有路径(`onPath` 数组)
同时使用 `visited` 和 `onPath` 数组
完全不用 `visited` 和 `onPath` 数组
广度优先搜索(BFS)
写法一
写法二
写法三