算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础
深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历、嵌套关系处理、回溯等,可以用递归、堆栈(stack)实现DFS过程。
关于广度优先搜索(BFS)详见:算法与数据结构基础 - 广度优先搜索(BFS)
关于递归(Recursion)详见:算法与数据结构基础 - 递归(Recursion)
树的遍历
DFS常用于二叉树的遍历,关于二叉树详见:
算法与数据结构基础 - 二叉查找树(Binary Search Tree)
相关LeetCode题:
559. Maximum Depth of N-ary Tree 题解
897. Increasing Order Search Tree 题解
108. Convert Sorted Array to Binary Search Tree 题解
111. Minimum Depth of Binary Tree 题解
979. Distribute Coins in Binary Tree 题解
366. Find Leaves of Binary Tree 题解
1123. Lowest Common Ancestor of Deepest Leaves 题解
1110. Delete Nodes And Return Forest 题解
1026. Maximum Difference Between Node and Ancestor 题解
515. Find Largest Value in Each Tree Row 题解
199. Binary Tree Right Side View 题解
1145. Binary Tree Coloring Game 题解
863. All Nodes Distance K in Binary Tree 题解
114. Flatten Binary Tree to Linked List 题解
971. Flip Binary Tree To Match Preorder Traversal 题解
105. Construct Binary Tree from Preorder and Inorder Traversal 题解
109. Convert Sorted List to Binary Search Tree 题解
116. Populating Next Right Pointers in Each Node 题解
124. Binary Tree Maximum Path Sum 题解
99. Recover Binary Search Tree 题解
图的遍历
树可视作一类特殊的图,更一般地DFS用于图的遍历,可视化过程
关于图详见:算法与数据结构基础 - 图(Graph)
相关LeetCode题:
756. Pyramid Transition Matrix 题解
694. Number of Distinct Islands 题解
711. Number of Distinct Islands II 题解
802. Find Eventual Safe States 题解
329. Longest Increasing Path in a Matrix 题解
834. Sum of Distances in Tree 题解
嵌套关系处理
DFS可用于形如 "3[a2[c]]" 存在嵌套关系的问题处理,例如 LeetCode题目394. Decode String:
// 394. Decode String
string decode(string s,int& pos){
string res="";
int num=;
for(;pos<s.length();pos++){
if(s[pos]=='['){
string tmp=decode(s,++pos);
for(;num>;num--) res+=tmp;
}
else if(s[pos]>=''&&s[pos]<='')
num=num*+s[pos]-'';
else if(s[pos]==']') return res;
else
res+=s[pos];
}
return res;
}
以上通过DFS进入到最内层的 '[ ]',之后随着函数返回、由内向外层层展开。
相关LeetCode题:
339. Nested List Weight Sum 题解
DFS与回溯
回溯(Backtracking)算法中选择一条路径并走到底的思路,正是DFS。DFS是构成回溯算法的一部分。
关于回溯详见:算法与数据结构基础 - 回溯(Backtracking)
相关LeetCode题:
301. Remove Invalid Parentheses 题解
DFS与Memorization
和BFS过程一样,应用DFS时也有可能重复访问同一节点,这时可用Memorization记录哪些节点已经访问过,避免路径重复遍历。
相关LeetCode题:
1059. All Paths from Source Lead to Destination 题解
算法与数据结构基础 - 深度优先搜索(DFS)的更多相关文章
- 算法与数据结构基础 - 广度优先搜索(BFS)
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...
- 算法与数据结构基础 - 图(Graph)
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
- 【算法入门】深度优先搜索(DFS)
深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- 算法与数据结构基础 - 二叉树(Binary Tree)
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
随机推荐
- 分享:个人APP(非企业资质)的微信登录方案
目前微信开放平台个人主体类APP不支持开通微信登录,那么个人开发者如何解决微信登录的问题呢?目前有一种替代方案是用微信小程序作为媒介来达到微信登录的目的. 微信小程序的登录无需企业资质,同时登录后返回 ...
- 导入 SQL 时出现 Invalid default value for 'create_time' 报错解决方法
问题描述 十三在 GitHub 仓库中开源了一个 Spring Boot 技术栈开发的 My-Blog 项目: 因为功能比较多,数据的存储就选择了 MySQL 数据库,该项目的表结构也放到了仓库中,方 ...
- 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[1]:验证模型
CKB 脚本编程简介[1]: 验证模型 本文作者:Xuejie 原文链接:Introduction to CKB Script Programming 1: Validation Model 本文译者 ...
- shell中if的各种判断
shell编程中使用到得if语句内判断参数 –b当file存在并且是块文件时返回真 -c当file存在并且是字符文件时返回真 -d当pathname存在并且是一个目录时返回真 -e当pathname指 ...
- 简易数据分析 11 | Web Scraper 抓取表格数据
这是简易数据分析系列的第 11 篇文章. 今天我们讲讲如何抓取网页表格里的数据.首先我们分析一下,网页里的经典表格是怎么构成的. First Name 所在的行比较特殊,是一个表格的表头,表示信息分类 ...
- KVC的使用
KVC的使用如下: (1)利用给对象的属性赋值,调用如下两个方法 - (void)setValue:(nullable id)value forKey:(NSString *)key; - (void ...
- Python--高阶函数、函数嵌套、名称空间及变量作用域、闭包、装饰器
1.高阶函数(map/reduce/filter) 高阶函数是指函数的参数可以是函数 这篇总结几个常用的高阶函数:map/reduce/filter map函数.reduce函数.filter函数都是 ...
- 快速了解会话管理三剑客cookie、session和JWT
更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 存储位置 三者都是应用在web中对http无状态协议的补充,达到状态保持的目的 cookie:cookie中的信息是 ...
- 第1章 NLP基础
大纲 NLP基础概念 NLP的发展与应用 NLP常用术语以及扩展介绍 1.1 什么是NLP 基本分类 自然语言生成(Natural Language Generation,NLG) 指从结构化数据中以 ...
- 基本图像操作和处理(python)
基本图像操作和处理(python) PIL提供了通用的图像处理功能,以及大量的基本图像操作,如图像缩放.裁剪.旋转.颜色转换等. Matplotlib提供了强大的绘图功能,其下的pylab/pyplo ...