/*
Dfs recursive with global flag
Time, Space Complexity - O(n)
*/
var hasPathSum = function (root, sum) {
if (!root) return false
let flag = false
// recursive dfs
function recurse(node, target) {
target -= node.val
if (!node.left && !node.right) {
if (target === 0) flag = true
return
}
// if a path sum exists, don't try anymore paths
// if (flag) return
if (node.left) recurse(node.left, target)
if (node.right) recurse(node.right, target)
}
recurse(root, sum)
return flag
}
// ----------------------------------------------------------------------
// Dfs recursive without global flag
var hasPathSum = function (root, sum) {
if (!root) return false
// recursive dfs
function recurse(node, target) {
target -= node.val
if (!node.left && !node.right) {
if (target === 0) return true
return false
}
let left, right
if (node.left) left = recurse(node.left, target)
// If left returns true, it will never try the right path
if (left) return left
// Try right if left is false
if (node.right) right = recurse(node.right, target)
if (right) return right
// If right is null or right is false return false
return false
}
return recurse(root, sum)
}