112.这个前序,遍历到当前节点就判断一下,行的话提前终止,向上传递True,不然继续遍历
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
def traversal(node, path_sum):
if not node:
return False
#累计节点值的和
#遇到叶子节点就进行判断,如果找到了直接返回True
path_sum += node.val
if not node.left and not node.right:
if path_sum == targetSum:
return True
#左边找到的话,直接向上传递True,后面不用再遍历
left_res = traversal(node.left, path_sum)
if left_res:
return True
#右边找到的话,直接向上传递True,后面不用再遍历
right_res = traversal(node.right, path_sum)
if right_res:
return True
return False
return traversal(root, 0)
113.这个也是前序,只是不断加入path罢了,而且一定要遍历完,不能像112提前结束,大差不差的
class Solution:
def pathSum(self, root: Optional[TreeNode], targetSum: int) -> List[List[int]]:
paths = []
def traversal(node, path_sum, path):
if not node:
return
path.append(node.val)
path_sum += node.val
if not node.left and not node.right:
if path_sum == targetSum:
paths.append(path)
traversal(node.left, path_sum, path[:])
traversal(node.right, path_sum, path[:])
traversal(root, 0, [])
return paths