思路
使用回溯法来解
若存在从根节点到叶子节点的路径,则其总和=targetSum,所以从根节点出发,依次去遍历左子树、右子树,每遍历一个节点,用targetSum-对应节点的值(回退时加上对应节点的值)。若路径遍历结束且targetSum=0 说明存在对应路径。
代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def hasPathSum(self, root, targetSum):
"""
:type root: Optional[TreeNode]
:type targetSum: int
:rtype: bool
"""
def backs(root,targetSum):
#终结
if root.left is None and root.right is None and targetSum == 0:
return True
#往左子树寻找
if root.left:
targetSum-=root.left.val
if backs(root.left,targetSum):
return True
targetSum+=root.left.val
#往右子树查找
if root.right:
targetSum-=root.right.val
if backs(root.right,targetSum):
return True
targetSum+=root.right.val
#都找不到
return False
if root is None:
return False
targetSum-=root.val
return backs(root,targetSum)