1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { if (root == null) return false; return helper(root, 0, targetSum); }
private boolean helper(TreeNode node, int sum, int targetSum) { sum += node.val; if (node.left == null && node.right == null && sum == targetSum) return true; if (node.left != null && helper(node.left, sum, targetSum)) return true; if (node.right != null) return helper(node.right, sum, targetSum); return false; } }
|
就是backtrack没什么好说的. 当时我突然意识到这个backtrack从某个递归函数出发, 又最终回到该递归函数. 于是我们通过合理的设置递归函数的返回值就能知道backtrack过程中是否遇到了我们想要的结果. 比如这道题就是让递归函数的返回值是boolean就是说明是否到某个leaf凑到了targetSum. 比如25行递归下去, 又回来, 如果递归函数告诉我们有leaf达到了targetSum, 那么我们直接返回true即可, 告诉上层下面有找到, 不必再走node.right.