递归,回溯,DFS,BFS的理解和模板

这篇博客总结了LeetCode中常见的递归、回溯、深度优先搜索(DFS)和广度优先搜索(BFS)的概念及应用场景。通过解答树的角度,解释了它们之间的联系和区别。递归虽然结构简洁但可能导致效率低和栈溢出;回溯是带有剪枝的DFS过程。BFS通常使用队列,DFS则可用递归或显式栈实现,递归方式可能引起栈溢出。举例说明了BFS在二叉树层次遍历和图的最短路径问题的应用。

LeetCode 里面很大一部分题目都是属于这个范围,例如Path Sum用的就是递归+DFS,Path Sum2用的是递归+DFS+回溯


这里参考了一些网上写得很不错的文章,总结一下理解与模板

递归:就是出现这种情况的代码: (或者说是用到了栈)

解答树角度:在dfs遍历一棵解答树      

优点:结构简洁

缺点:效率低,可能栈溢出


递归的一般结构:

void f()
{
     if(符合边界条件)
    {
       ///////
        return;
    }
    
     //某种形式的调用
     f();
}


<think>好的,用户需要DFSBFS的算法模板实现示例。首先,我需要回忆一下这两种算法的基本概念步骤。DFS通常用递归或栈实现,而BFS用队列。接下来得确认用户是否需要代码示例,以及用什么编程语言。用户提供的示例中用了Python,所以可能倾向于Python的代码。 然后,要确保模板的正确性,比如DFS递归迭代写法,BFS的标准队列处理。还要考虑是否需要注释说明每一步的作用,让用户更容易理解。此外,用户提到了引用资料,需要检查是否有相关的引用可以对应到内容里。例如,引用[3]提到BFS用于找最短路径,这点可以在BFS部分提到。 接下来,要组织回答结构。先简要介绍DFSBFS,然后分别给出模板代码示例。可能还需要比较两者的区别应用场景,但用户主要问的是模板实现,所以这部分可以放在相关问题里。同时,要确保代码符合格式要求,使用正确的LaTeX语法,比如变量用$...$包裹。 需要注意用户提供的引用内容,比如引用[4]解释了BFS是逐层遍历,所以在描述BFS时应该提到这一点。同时,引用[3]提到BFS找的是最短路径,这在BFS的应用中很重要,应该强调。 在编写代码时,要检查语法是否正确,比如Python的队列操作是否使用deque,递归的终止条件是否明确。此外,示例应用场景,比如二叉树的遍历,可能有助于用户理解模板的使用。 最后,生成相关问题,考虑用户可能的后续疑问,比如性能比较、应用场景、优化方法等。确保问题覆盖常见的学习点,帮助用户深入理解。</think>### 深度优先搜索(DFS)与广度优先搜索(BFS)算法模板 #### 1. **DFS 算法模板** DFS 通过递归或栈实现,优先探索“深度”方向,适合解决路径问题、连通性问题等[^3]。 **递归模板(以二叉树遍历为例)**: ```python def dfs(node): if node is None: # 终止条件 return # 处理当前节点(前序遍历) print(node.val) dfs(node.left) # 递归左子树 dfs(node.right) # 递归右子树 ``` **迭代模板(使用栈)**: ```python def dfs_iterative(root): stack = [root] while stack: node = stack.pop() if node: # 处理当前节点 print(node.val) stack.append(node.right) # 右子节点先入栈(后处理) stack.append(node.left) # 左子节点后入栈(先处理) ``` #### 2. **BFS 算法模板** BFS 通过队列实现,逐层扩展搜索,适合找最短路径、层序遍历等[^4]。 ```python from collections import deque def bfs(root): queue = deque([root]) while queue: level_size = len(queue) for _ in range(level_size): # 遍历当前层所有节点 node = queue.popleft() # 处理当前节点 print(node.val) if node.left: queue.append(node.left) # 左子节点入队 if node.right: queue.append(node.right) # 右子节点入队 ``` --- ### **示例应用场景** - **DFS**:二叉树的前/中/后序遍历、图的连通性判断、回溯问题(如八皇后)[^2]。 - **BFS**:二叉树层序遍历、最短路径(如迷宫问题)、社交网络中的“六度空间”理论。 --- ### **对比与核心区别** 1. **数据结构**:DFS用栈(递归隐式栈),BFS用队列。 2. **搜索顺序**:DFS优先深度,BFS优先广度。 3. **空间复杂度**:BFS通常高于DFS(尤其在树形结构较宽时)。 4. **适用场景**:DFS适合存在性判断,BFS适合最短路径问题[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值