给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
思路:主要的点在于不确定当前的节点是否存在于一条路径上,该路径的和为sum,所以需要分情况讨论
① 假设当前节点在一条这样的路径上,则递归寻找其左右子树,使剩下的和为sum - root.val
② 假设当前节点并不在这样一条路径上,则递归寻找其左右子树,使剩下的和为sum
③注意返回值条件
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> int:
if root == None:
return 0
res = 0
res = res + self.findPath(root, sum)
# 不包含当前root节点的路径,和为sum的路径个数
res = res + self.pathSum(root.left, sum)
res = res + self.pathSum(root.right, sum)
return res
def findPath(self, root: TreeNode, sum: int) -> int:
# 返回包含root节点的路径,和为sum的路径个数
if root == None:
return 0
res = 0
if root.val == sum:
res = res + 1
res = res + self.findPath(root.left, sum - root.val)
res = res + self.findPath(root.right, sum - root.val)
return res
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://wangjiawei.blog.csdn.net/article/details/103633865