
1、递归
#class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root: return False
sum -= root.val
if not root.left and not root.right:
return sum == 0
return self.hasPathSum(root.left, sum) or self.hasPathSum(root.right, sum)
2、迭代
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root: return False
stack = [(root, sum - root.val)]
while stack:
cur_node, cur_sum = stack.pop()
if not cur_node.left and not cur_node.right and cur_sum == 0:
return True
if cur_node.left:
stack.append((cur_node.left, cur_sum - cur_node.left.val))
if cur_node.right:
stack.append((cur_node.right, cur_sum - cur_node.right.val))
return False

本文探讨了在二叉树中寻找是否存在一条从根节点到叶子节点的路径,该路径上所有节点值之和等于给定的目标和。通过递归和迭代两种方法详细解析了算法实现,为理解二叉树的遍历提供了深入的视角。
195

被折叠的 条评论
为什么被折叠?



