思路
深度遍历时记录当前节点的值和sum
代码
递归版
var hasPathSum = function(root, targetSum) {
if(!root) return false
let flag = false
const dfs = (n,sum) => {
if(!n.left && !n.right && sum === targetSum){
flag = true
}
if(n.left) dfs(n.left,sum + n.left.val)
if(n.right) dfs(n.right,sum + n.right.val)
}
dfs(root,root.val)
return flag
};
非递归版
var hasPathSum = function(root, targetSum) {
if(!root) return false
let flag = false
let stack = [[root,root.val]]
while(stack.length){
const [n,sum] = stack.pop()
if(!n.left && !n.right && sum === targetSum){
flag = true
}
if(n.left) stack.push([n.left,n.left.val + sum])
if(n.right) stack.push([n.right,n.right.val + sum])
}
return flag
};
复杂度
时间:O(n) 空间 :O(n)