问题描述 Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum.
A leaf is a node with no children.
Constraints:
The number of nodes in the tree is in the range [0, 5000].
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
解答 方法一:递归 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 const hasPathSum = function (root, targetSum ) { if (!root) { return false } if (root.left === null && root.right === null && targetSum === root.val) { return true } return (hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val)) }
方法二:DFS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 const hasPathSum = function (root, targetSum ) { if (!root) { return false } let nodeStack = [root] let valStack = [root.val] while (nodeStack.length) { let cur = nodeStack.pop() let curVal = valStack.pop() if (cur.left === null && cur.right === null && curVal === targetSum) { return true } if (cur.left) { nodeStack.push(cur.left) valStack.push(curVal + cur.left.val) } if (cur.right) { nodeStack.push(cur.right) valStack.push(curVal + cur.right.val) } } return false }