后遍历遍历以计算二叉树中的路径总和

时间:2019-04-23 14:59:10

标签: python algorithm

我正在尝试解决问题Path Sum - LeetCode

  
      
  1. 路径总和
  2.   
     

给出一棵二叉树和一个和,确定该树是否具有从根到叶的路径,以使该路径上的所有值加起来等于给定的和。

     

注意:叶子是没有子节点。

     

示例:

     

给出下面的二叉树和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)

然后我不知道该如何继续。您能给我一些提示吗?

1 个答案:

答案 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