1.深度优先搜索(DFS)和树的先根遍历
事实上,对所有合法的DFS求解过程,都可以把它画成树的形式,此时死胡同等价于树中的叶子结点,而岔道口等价于树中的非叶子结点,并且对这棵树的DFS遍历过程就是树的先根遍历的过程。于是可以从中得到启发:碰到一些可以用DFS做的题目,不妨把一些状态作为树的结点,然后问题就会转换为直观的对树进行先根遍历的问题。如果想要得到树的某些信息,也可以借用DFS以深度作为第一关键词的思想来对结点进行遍历,以获得所需的结果。例如求解叶子结点的带权路径和(即从根结点到叶子结点的路径上的结点点权之和)时就可以把到达死胡同作为一条路径结束的判断。
另外,在讲解深度优先搜索时,提到了剪枝的概念,即在进行DFS的过程中对某条可以确定不存在解的子树采取直接剪断的策略,这就是把DFS从树的角度理解才产生的概念。这样将会在某些问题中极大降低计算量。但是剪枝使用的前提是必须保证剪枝的正确性,否则就可能因剪掉了有解的子树而最终获得了错误的答案。
2.广度优先搜索(BFS)和树的层序遍历
通过前面的内容可知,广度优先搜索是以广度为第一关键词的。在使用BFS模拟迷宫问题的过程中,依然将迷宫的岔道口和死胡同都简化为结点,将迷宫的结构转换为树。借用上面刚得到的迷宫树型图来分析,如果模仿层序遍历的方法来遍历这棵树,就可以得到当初BFS过程中得到的序列。事实上,对所有合法的BFS求解过程,都可以像DFS中那样画出一棵树,并且将广度优先搜索问题转换为树的层序遍历的问题。