求解二叉树路径和时有没有更优雅的递归退出方式?
优化实现方案
你可以直接利用递归返回值的短路特性实现提前终止,不需要额外定义类标记变量,同时还能修复原代码未判断叶子节点的逻辑问题:
class Solution: def hasPathSum(self, root: TreeNode, targetSum: int) -> bool: # 空节点直接返回不匹配 if not root: return False # 到达叶子节点,判断剩余和是否匹配当前节点值 if not root.left and not root.right: return targetSum == root.val # 短路或特性:左子树找到匹配就不会执行右子树递归,自动提前终止 return self.hasPathSum(root.left, targetSum - root.val) \ or self.hasPathSum(root.right, targetSum - root.val)
优化说明
- 无需额外标记变量:通过布尔返回值传递匹配结果,匹配成功后直接短路后续递归,没有多余的函数调用,真正实现提前终止
- 逻辑更简洁:不用维护当前路径和变量,每次递归传入扣除当前节点值后的剩余目标和即可
- 修复原代码漏洞:原代码只要路径累计和等于目标值就会标记成功,没有判断是否为叶子节点,不符合「根到叶子路径」的题目要求
内容的提问来源于stack exchange,提问作者user5622143
相关产品推荐
相关产品推荐

