DFS的一些理解

155 阅读1分钟

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. 二叉树中和为某一值的路径

剑指 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;
};