【问题标题】:Maximum Sum Path in a Binary Tree二叉树中的最大和路径
【发布时间】:2018-08-10 10:12:03
【问题描述】:

我正在尝试解决这个问题:https://leetcode.com/problems/binary-tree-maximum-path-sum/description/

求最大和路径就像求任意两个节点之间的最大路径,该路径可能经过也可能不经过根节点;除了最大和路径我们想要跟踪总和而不是路径长度。

所以,我调整了二叉树解的直径来找到最大和路径。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:

    def height(self, root):
        if root==None:
            return 0

        lh = self.height(root.left)
        rh = self.height(root.right)

        return max(root.val+lh, root.val+rh)

    def maxPathSum(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root==None:
            return 0

        lh = self.height(root.left)
        rh = self.height(root.right)

        ld =  self.maxPathSum(root.left)
        rd =  self.maxPathSum(root.right)

        return max(lh+rh+root.val, root.val+ max(ld , rd))

我的解决方案是在失败前通过 40 个测试用例。

我一直在试图找出正确的解决方案。我的解决方案适用于查找直径,我只是在返回值中添加了 sum。

为什么这不是一个通用的解决方案,因为我清楚地遍历所有路径并在返回值中取适当的最大值。

感谢您的帮助。

【问题讨论】:

    标签: python algorithm recursion data-structures binary-tree


    【解决方案1】:

    问题出在这一行

    return max(lh+rh+root.val, root.val+ max(ld , rd))
    

    应该是

    return max(lh+rh+root.val, max(ld , rd))
    

    请注意,根节点不是ldrd 路径的一部分。

    【讨论】:

    • 谢谢,对于只有一个节点的树,代码失败:-3。代码返回 0。
    • @mourinho 我没有意识到树中可能存在负值。处理负值会使问题变得更加困难。例如,在计算height 时,在到达叶节点之前停止可能是有利的。这意味着您需要考虑从每个节点到每个其他节点的路径。您的算法仅检查从根到两个叶节点的路径。
    • 发生这种情况是因为我没有在任何地方初始化最小值,所以 max (-3, 0) 给出 0。真的不知道如何在递归中做到这一点......当前的解决方案,你的答案是通过 60 个测试用例...所以我认为逻辑很好..
    • 考虑一棵树,其中所有值都是负数,除了两个恰好相互连接的正节点。最佳路径将是这两个节点之间的路径。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 2021-07-24
    • 2016-03-17
    • 1970-01-01
    • 2021-03-17
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多