📅  最后修改于: 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$ 为节点数。