DFS基础

深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历、嵌套关系处理、回溯等,可以用递归、堆栈(stack)实现DFS过程。

关于广度优先搜索(BFS)详见:算法与数据结构基础 - 广度优先搜索(BFS)

关于递归(Recursion)详见:算法与数据结构基础 - 递归(Recursion)

树的遍历

DFS常用于二叉树的遍历,关于二叉树详见:

算法与数据结构基础 - 二叉查找树(Binary Search Tree)

算法与数据结构基础 - 二叉树(Binary Tree)

相关LeetCode题:

559. Maximum Depth of N-ary Tree  题解

897. Increasing Order Search Tree  题解

872. Leaf-Similar Trees  题解

108. Convert Sorted Array to Binary Search Tree  题解

100. Same Tree  题解

257. Binary Tree Paths  题解

101. Symmetric Tree  题解

110. Balanced Binary Tree  题解

112. Path Sum  题解

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  题解

337. House Robber III  题解

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  题解

968. Binary Tree Cameras  题解

图的遍历

树可视作一类特殊的图,更一般地DFS用于图的遍历,可视化过程

关于图详见:算法与数据结构基础 - 图(Graph)

相关LeetCode题:

733. Flood Fill  题解

841. Keys and Rooms  题解

695. Max Area of Island  题解

531. Lonely Pixel I  题解

756. Pyramid Transition Matrix  题解

694. Number of Distinct Islands  题解

711. Number of Distinct Islands II  题解

638. Shopping Offers  题解

851. Loud and Rich  题解

802. Find Eventual Safe States  题解

785. Is Graph Bipartite?  题解

200. Number of Islands  题解

1034. Coloring A Border  题解

332. Reconstruct Itinerary  题解

329. Longest Increasing Path in a Matrix  题解

834. Sum of Distances in Tree  题解

499. The Maze III  题解

嵌套关系处理

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题:

394. Decode String  题解

690. Employee Importance  题解

339. Nested List Weight Sum  题解

1020. Number of Enclaves  题解

DFS与回溯

回溯(Backtracking)算法中选择一条路径并走到底的思路,正是DFS。DFS是构成回溯算法的一部分。

关于回溯详见:算法与数据结构基础 - 回溯(Backtracking)

相关LeetCode题:

494. Target Sum  题解

473. Matchsticks to Square  题解

980. Unique Paths III  题解

301. Remove Invalid Parentheses  题解

DFS与Memorization

和BFS过程一样,应用DFS时也有可能重复访问同一节点,这时可用Memorization记录哪些节点已经访问过,避免路径重复遍历。

相关LeetCode题:

851. Loud and Rich  题解

547. Friend Circles  题解

490. The Maze  题解

1059. All Paths from Source Lead to Destination  题解

934. Shortest Bridge  题解

489. Robot Room Cleaner  题解

753. Cracking the Safe  题解

749. Contain Virus  题解

514. Freedom Trail  题解

546. Remove Boxes  题解

算法与数据结构基础 - 深度优先搜索(DFS)的更多相关文章

  1. 算法与数据结构基础 - 广度优先搜索(BFS)

    BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...

  2. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  3. 【算法入门】深度优先搜索(DFS)

    深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...

  4. 深度优先搜索 DFS 学习笔记

    深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...

  5. 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...

  6. 算法与数据结构基础 - 二叉树(Binary Tree)

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

  7. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  8. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  9. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

随机推荐

  1. Liunx学习总结(六)--进程

    进程概述 简单来讲程序是一个包含可以执行代码的静态的文件.进程是一个开始执行但是还没有结束的程序的实例.当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作 ...

  2. java中的case里嵌套if条件句; 输入一个年份的某一个月份,判断这个月有多少天

    public class year {    public static void main(String arg[]){        Scanner a=new Scanner(System.in ...

  3. angular8 + redux 管理状态

    1. angular8.1.1 ----- package.json { "name": "angular-demo", "version" ...

  4. 朋友聚会,下馆子要到哪家饭馆?——单样本T检验帮你找到答案

      聚会时,五花八门的饭馆让人眼花缭乱,应该到哪家店吃呢?除了美味的食物,良好的服务态度也是好饭馆的必备品质,如何判断一家饭馆的服务态度如何?此时可以用单样本T检验来找答案~ 让顾客对A饭馆的服务态度 ...

  5. 【Bazinga HDU - 5510 】【考察strstr()的使用】【贪心】

    题意分析 1.题目大致说的是让你输出符合这种条件(在所给的字符串中至少有一个不是它的子串)的字符串对应的label,若没有输出-1: 2.判断子串可以用string.h下的strstr(s1, s2) ...

  6. 2019杭电多校6 hdu6638 Snowy Smile(二维最大矩阵和 线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你一些点的权值,让找一个矩形圈住一部分点,问圈住点的最大权值和 分析:由于是稀疏图,明显要先把x, ...

  7. POJ 1390 Blocks (区间DP) 题解

    题意 t组数据,每组数据有n个方块,给出它们的颜色,每次消去的得分为相同颜色块个数的平方(要求连续),求最大得分. 首先看到这题我们发现我们要把大块尽可能放在一起才会有最大收益,我们要将相同颜色块合在 ...

  8. VUE中CSS样式穿透

    VUE中CSS样式穿透 1. 问题由来 在做两款H5的APP项目,前期采用微信官方推荐的weui组件库.后来因呈现的效果不理想,组件不丰富,最终项目完成后全部升级采用了有赞开发的vant组件库.同时将 ...

  9. ie表单提交提示下载文件

    使用jquery的ajaxform提交form表单 如果在html中多了   enctype ="multipart/form-data"   属性值 提交时就会在ie8中提示下载 ...

  10. Map四种获取key和value值的方法,以及对map中的元素排序(转)

    获取map的值主要有四种方法,这四种方法又分为两类,一类是调用map.keySet()方法来获取key和value的值,另一类则是通过map.entrySet()方法来取值,两者的区别在于,前者主要是 ...