DFS
DFS 分为前中后序遍历, DFS适合做一些暴力枚举的题目,DFS如果借助函数调用栈,可以轻松的时候递归来实现
DFS最常见的分类是前序遍历和后序遍历
DFS借助栈来完成
// 前序遍历
function dfs(root) {
if (满足特定条件){
// 返回结果 or 退出搜索空间
}
// 主逻辑在这里执行
dfs(root.left)
dfs(root.right)
}
// 后序遍历
function dfs(root) {
if (满足特定条件){
// 返回结果 or 退出搜索空间
}
dfs(root.left)
dfs(root.right)
// 主逻辑在这里执行
}
剑指 Offer 34. 二叉树中和为某一值的路径
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} target
* @return {number[][]}
*/
var pathSum = function(root, target) {
let path = [];
let result = [];
function DFS (node, sum) {
if (!node) {
return;
}
// 主逻辑
if (!node.left && !node.right && (target === (sum+node.val))) {
result.push([...path, node.val]);
}
path.push(node.val);
DFS(node.left, sum + node.val);
DFS(node.right, sum + node.val);
path.pop();
}
DFS(root, 0);
return result;
};