/*
Dfs recursive with mutable slate
*/
var pathSum = function (root, sum) {
// recursive dfs helper
function recurse(node, slate, target) {
target -= node.val
if (!node.left && !node.right) {
if (target === 0) {
slate.push(node.val)
res.push(slate.slice(0))
slate.pop()
}
return
}
slate.push(node.val)
if (node.left) recurse(node.left, slate, target)
if (node.right) recurse(node.right, slate, target)
slate.pop()
}
// overall
if (!root) return []
const res = []
recurse(root, [], sum)
return res
}