路径总和
描述:
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
DFS(Depth-First Search,深度优先搜索)
首先是 DFS 解法,该解法的想法是一直向下找到 叶子节点,如果到 叶子节点 时 sum == 0,说明找到了一条符合要求的路径。
在找寻叶子节点的过程中,sum并不是累加出来的,而是累差出来的,也就是通过自上而下递归的过程中,通过给定的sum值减去递归遍历到的节点的值,那么减到最后叶子节点,如果剩下的sum值=叶子节点的值,那么这个路径就存在
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def hasPathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: bool
"""
if not root: return False
if not root.left and not root.right:
return sum == root.val
return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)