📅  最后修改于: 2023-12-03 15:26:24.788000             🧑  作者: Mango
给定一个 N 叉树,树中每个节点都包含一个整数值,现从根节点出发,需要求出一条从根节点到叶节点的路径,使得路径上的所有节点值的和最大。N 叉树定义如下:
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
对于这个问题,我们可以采用深度优先搜索(DFS)的思路,从根节点开始遍历整棵树,计算出每个节点到根节点的路径和,并记录路径和的最大值。
我们可以定义一个递归函数 dfs(node, sum)
,其中 node
表示当前节点,sum
表示从根节点到当前节点的路径和。对于每个节点,我们遍历它的每个子节点,然后递归调用 dfs
函数计算它的子节点的路径和。最终,我们对所有路径和求最大值即可。
具体实现如下:
class Solution:
def maxPathSum(self, root: 'Node') -> int:
self.res = float('-inf') # 初始化最大值为负无穷大
def dfs(node, sum):
if not node: # 如果节点为空,返回
return
if not node.children: # 如果节点是叶节点,更新最大值并返回
self.res = max(self.res, sum + node.val)
return
for child in node.children: # 遍历子节点
dfs(child, sum + node.val) # 递归调用 dfs 函数
dfs(root, 0) # 从根节点开始递归
return self.res # 返回最大值