112.路径总和

127 阅读1分钟

思路

深度遍历时记录当前节点的值和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)