深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次.
算法优先搜索
1. 二叉树有关问题
2. 需要从根节点遍历到末尾叶子节点
常见题型
满足(最大、最小,某种要求)的深度、路径、节点和.......
DFS思路
1. 创建结果存储变量,初始化当前结果
2. 设计递归函数
— 函数执行过程
—— 若到达结尾,则返回
—— 若未到达结尾,则更新当前结果
—— 若到达末尾叶子节点,进行最优结果更新
—— 分别对当前节点的左/右子节点调用递归函数
3. 开始调用递归函数
DFS代码模板
function dfSTemplate(root){
// 存储当前结果
let res;
// 初始化当前结果
let start;
// 构造递归函数dfs,通常参数为当前节点和当前结果
let dfs = (node,currentResult)=>{
// 终止条件返回判断
if(node == null){
return
}
// 更新当前结果currentResult
// 若到达末尾叶子结点,进行最优结果更新
if(node.left == null && node.right == null){
// 更新最优结果 res
}
// 左右子树递归
dfs(node.left,currentResult);
dfs(node.right,currentResult);
}
dfs(root,start);
return res;
}