📅  最后修改于: 2023-12-03 15:40:27.783000             🧑  作者: Mango
在二叉树中,从根节点到叶子节点的一条路径上的所有节点值之和为这条路径的和。要求编写一个函数,判断是否存在根到叶路径的和等于给定数字。
对二叉树进行深度优先遍历,记录当前路径的和。当遍历到叶子节点时,判断当前路径的和是否等于给定数字。如果等于,返回 True
,否则继续遍历其他路径。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def hasPathSum(root: TreeNode, targetSum: int) -> bool:
if not root:
return False
def dfs(node, cur_sum):
if not node.left and not node.right:
return cur_sum + node.val == targetSum
res = False
if node.left:
res = res or dfs(node.left, cur_sum + node.val)
if node.right:
res = res or dfs(node.right, cur_sum + node.val)
return res
return dfs(root, 0)
以上代码实现了二叉树中是否存在根到叶路径的和等于给定数字的功能。
上述算法需要遍历整个二叉树才能得出答案,因此时间复杂度为 $O(n)$,其中 $n$ 为节点个数。同时,递归栈的最大深度为二叉树的高度,因此空间复杂度最大为 $O(h)$,其中 $h$ 为二叉树的高度。