在树(或者图)中进行搜索是一个非常重要的话题,具体来说,又分为深度优先搜索(DFS,Depth First Search)和广度优先搜索(BFS, Breadth First Search)两种。其中,前者的理解难度要大于后者,而且在Leetcode解题中,前者应用得也更多。在涉及到回溯或动态规划时,往往也需要借助到DFS来编程实现。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下DFS有关的一些话题。本文中的示例代码主要使用Python3写成。同时,推荐参考《算法之美:隐匿在数据结构背后的原理》一书中的相关章节以了解更多本文未能充分尽述的细节(该书中的代码以C++写成)。
正如开篇所提到的,除了树之外,图的遍历中也会用到深度优先这个想法,而且这种类型的题目在Le