如果按照迭代法解决此问题的话,就是计算根节点到当前节点的和,利用队列的思想,
# 记录根节点到当前节点的总和
if not root:
return False
queue=collections.deque([root])
queue_val=collections.deque([root.val])
while queue:
now=queue.popleft()
curval=queue_val.popleft()
if not now.left and not now.right:
if curval==targetSum:
return True
continue
if now.left:
queue.append(now.left)
queue_val.append(now.left.val+curval)
if now.right:
queue.append(now.right)
queue_val.append(now.right.val+curval)
return False
如果按照递归法解决该问题的话,就是在左右子树中递归的寻找能否找到相等的值,每次递归的时候减去当前的节点值。在此题中我明白了每次是怎么update targetsum的,开始新一轮递归时,targetsum=targetsum-root.val。
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)
这道题和上一道题的区别是,这道题不需要从根节点开始,也不需要在叶子节点结束,
# 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 pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:
# 递归解决
def pathsum(root,targetSum):
if not root:
return 0
ret = 0
if root.val==targetSum:
ret+=1
ret+=pathsum(root.left,targetSum-root.val)
ret+=pathsum(root.right,targetSum-root.val)
return ret
if not root:
return 0
ret=pathsum(root,targetSum)
ret+=self.pathSum(root.left,targetSum)
ret+=self.pathSum(root.right,targetSum)
return ret