📜  给定二叉树中任意路径的最大乘积(1)

📅  最后修改于: 2023-12-03 15:27:34.534000             🧑  作者: Mango

给定二叉树中任意路径的最大乘积

本题要求我们在一个给定的二叉树中,找到一条路径,使得路径上所有节点值的乘积最大。

解题思路

本题可以通过深度优先搜索(DFS)来解决。

对于每个节点,我们可以将其值与其左右子节点的最大路径乘积相乘,以得到该节点向上的最大路径乘积。同时,我们还需要记录当前最大的路径乘积。

为了避免乘积为负数的情况,我们需要记录最大乘积与最小乘积。

具体实现上,我们可以定义一个辅助函数 dfs(root),用于求得以当前节点为路径终点的最大乘积。

  • 若当前节点为 null,则返回 1
  • 否则,分别递归求出其左右子节点的最大和最小乘积,并将其与该节点的值相乘(包括一次以该节点为路径终点的情况),得到从该节点向上的最大和最小乘积,并更新全局最大乘积和最小乘积。
  • 最后,函数返回该节点向上的最大乘积。
代码实现
class Solution:
    def maxProduct(self, root: TreeNode) -> int:
        self.res = self.total_sum = 0
        self.dfs(root)
        
        return self.res % (10**9 + 7)
    
    def dfs(self, root):
        if not root:
            return 0
        
        left = self.dfs(root.left)
        right = self.dfs(root.right)
        cur_sum = left + right + root.val
        
        self.res = max(self.res, (self.total_sum - cur_sum) * cur_sum)
        
        return cur_sum
时间复杂度

本算法需要遍历整棵树,时间复杂度为 $O(n)$,其中 $n$ 为节点数。