力扣-路径总和

126 阅读1分钟

BFS 【广度优先算法】

广度优先算法,是一种图形搜索算法,从根节点开始,沿着树的宽度遍历树的节点,如果发现目标,则演算终止。

算法分析:

BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

DFS

深度优先搜索是用来遍历或搜索树和图数据结构的算法,它是可以从任意跟节点开始,选择一条路径走到底,并通过回溯来访问所有节点的算法。简单来说就是通过选择一条道路走到无路可走的时候回退到上一个岔路口,并标记这条路已走过,选择另外一条道路继续走,直到走遍每一条路。

BFS解法

思路

深度优先遍历,我们从根节点开始遍历,定义两个栈空间,一个存储所有路径相加的和, 一个所有的节点,

const hasPathSum = function(root, targetSum) {
    if (!root) return  false
    // 存储节点总数
    const res = []
    // 存储和
    const tempArr = []
    res.push(root)
    arr.push(root.val)

    while (res.length) {
        const head = res.pop()
        const temp = arr.pop()
        if (head.left ===null && head.right===null && targetSum === temp) {
            return true
        }

        if (head.left) {
            res.push(head.left)
            tempArr.push(temp + head.left.val)
        }
        if (head.right) {
            res.push(head.right)
            tempArr.push(temp + head.right.val)
        }
    }
    return false
};

DFS解法

思路 一直向下减,直到为空

const hasPathSum = function (root, targetSum) {
   if (!root) {
       return false
   }
   if (root.left === null && root.right ===null) {
       return targetSum === root.val
   }
   return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum-root.val)
}