求LeetCode 112. Path Sum正确递归解法及现有代码错误原因
代码问题分析
你的代码存在3个关键错误,导致测试用例无法通过:
- 未处理空树边界:当输入的
root为null时,直接访问root.left会触发空指针异常,LeetCode中存在空树的测试用例。 - 未接收递归返回值:你调用左右子树的
hasPathSum方法后,没有捕获它的返回结果,无论子树是否存在符合条件的路径,最终都会走到最后的return false,正确逻辑是只要左右子树任意一个返回true,当前方法就应该返回true。 - 边界判断逻辑不全:即使当前节点是叶子节点,也需要判断
targetSum - root.val不等于0的情况,这种场景下也应该直接返回false而不是走后续分支。
修正后代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { // 处理空树场景 if(root == null) { return false; } // 叶子节点判断逻辑 if(root.left == null && root.right == null) { return targetSum - root.val == 0; } // 只要左右子树任意一条路径满足条件就返回true return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val); } }
内容的提问来源于stack exchange,提问作者DerStrebsame
相关产品推荐
相关产品推荐

