LeetCode刷题笔记第112题:路径总和
想法:
要找到树中是否存在一条路径和为目标值,使用递归的方法。判断是否存在路径和是否等于目标值,从根节点开始,而根节点之下的子树判断是否存在目标值与根节点数值的差的路径,直到递归到叶子结点。具体代码及注释如下。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def hasPathSum(self, root: TreeNode, targetSum: int) -> bool:
# 如果根节点不存在则返回False
if not root:
return False
# 如果同时没有左右子树则仅有根节点,对比目标值与此时的数值是否相同,相同说明找到了根节点到叶子节点的路径,返回判断
if not root.left and not root.right:
return targetSum == root.val
# 当根节点存在左子树或者右子树,或者同时存在左右子树,递归判断,将目标值减去根节点的数值再去判断左右子树中的情况,返回最终的结果,当存在一条路径时则会返回True,反之则是False
return self.hasPathSum(root.left, targetSum - root.val) or self.hasPathSum(root.right, targetSum - root.val)