Leetcode 112 PathSum DFS解法

来源:7-4 注意递归的终止条件 Path Sum

讲武德的年轻人

2022-03-29

bobo老师,我用DFS解了这道题。但是dfs没有返回值,同时维护了一个成员变量findSum(代码如下)。我在想如何改造dfs函数, 使其直接返回true or false,但是失败了。能否请老师看下,如何把dfs改成boolean返回值类型呢?这样直接return dfs就行了


class Solution {
    
    private boolean findSum = false;
    
    public boolean hasPathSum(TreeNode root, int targetSum) {
     
        if (root == null) return false;
        
        dfs(root, root.val, targetSum);
        
        return findSum;
       
        
    }
    
    private void dfs(TreeNode node, int sum, int targetSum) {
        
        
        if (node.left == null && node.right == null) {
            if (sum == targetSum) {
                findSum = true;
                return;
            }
        } else {
            
            if (node.left != null) 
                dfs(node.left, sum + node.left.val, targetSum);
            if (node.right != null) 
                dfs(node.right, sum + node.right.val, targetSum);
            
        }
    }
   
}


写回答

1回答

liuyubobobo

2022-03-29

看看你能不能理解以下代码?


class Solution {
    
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root == null) return false;
        return dfs(root, targetSum);
    }
    
    // 寻找从 node 出发,有没有一条从 node 到叶子的路径,其和为 targetSum
    private boolean dfs(TreeNode node, int targetSum) {
        
        if (node.left == null && node.right == null){
            return targetSum == node.val;
        }
        
        if(node.left != null && dfs(node.left, targetSum - node.val))
            return true;
        
        if(node.right != null && dfs(node.right, targetSum - node.val))
            return true;
        
        return false;
    }
}

继续加油!:)

0
4
甲骨文_0001
谢谢🙏老师 明白了。
2022-03-29
共4条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程