我正在尝试解决问题Path Sum - LeetCode。
- 路径总和
给出一棵二叉树和一个和,确定该树是否具有从根到叶的路径,以使该路径上的所有值加起来等于给定的和。
注意:叶子是没有子节点。
示例:
给出下面的二叉树和
sum = 22
,5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
返回true,因为存在一个从根到叶的路径
5->4->11->2
,其总和为22。
我计划通过直观的订单遍历来解决它。
# 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:
def postorder(self, root):
if not root: return
self.postorder(root.left)
self.postorder(root.right)
loc_sum = loc_sum + self.postorder(root.val)
然后我不知道该如何继续。您能给我一些提示吗?
答案 0 :(得分:3)
正如@meowgoesthedog指出的那样,您可以使用递归来解决此问题。在下面的示例中,我沿着树走了,同时用当前值减少了所需的总和。只要有一个左节点或右节点,我就一直这样做(如果同时存在,则检查它们两者)。如果找不到左元素和右元素(这意味着您打了一片叶子),我只需检查剩余的所需总和是否等于当前值。您可以仅使用hasPathSum(,root,sum):
函数来执行此操作,但是也可以使用单独的postOrder
函数。
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 root.left:
if return self.hasPathSum(root.left, sum-root.val): return True
if root.right:
if return self.hasPathSum(root.right, sum-root.val): return True
else: return root.val == sum