LeetCode算法题回顾——DFS深度优先搜索

本文深入探讨DFS在图和树中的应用,详细解释DFS算法思想,并通过LeetCode中200. 岛屿的个数、46. 全排列和17. 电话号码的字母组合等中等难度题目进行实战解析,帮助读者掌握DFS的递归实现和技巧。
摘要由CSDN通过智能技术生成
  1. BFS和DFS很重要,是许多算法题的基础
  2. 应用范围:图 or 树。
  3. 求解问题类型:可达性问题(遍历的节点都是从初始节点可达的)
  4. 中心思想:不撞南墙不回头(所以终止条件“南墙”的设置很重要)

目录

1. 图/树 简述

2. DFS

dfs程序实现tips

递归代码框架

3. leetcode实例——medium

200. 岛屿的个数 &  46. 全排列 & 17. 电话号码的字母组合   


1. 图/树 简述

首先我们简单介绍一下图和树

  • 图(graph)表示物件与物件之间的关系的方法,一个图是由顶点(或称结点,vertex)和连接这些顶点的线(边,edge)组成的
图的示例
该图汇总有6个点,8条边,其中1号vertex有一条边指向自己
  • 树,大家应该很熟悉了(二叉树的题目也做了不少)N个点,N-1条边(只会有一条边指向自己,根节点没有所以是N-1).
  •  图中的DFS示例

DFS搜索步骤:

从1开始(任意选择一个节点,这里选2)

1→2→3→4→6(到达尾端,返回4节点的另一个选择5)

6→5(全部遍历,end)

path: 1→2→3→4→6→5(不唯一)

(DFS像不像走迷宫?一条路走到黑不行我们再回到上一个起点寻找其他路)

1→12→4→31→52→5→30→3→6

在二叉树中,是不是就像二叉树的先序遍历

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值