這道題是給一個(gè)樹,求任意起始點(diǎn),終止點(diǎn)的最大路徑。用dfs,很有意思的題。首先我們有一個(gè)變量,記錄遍歷樹得到的最大路徑。然后在遍歷過程中,我們的返回值是以當(dāng)前節(jié)點(diǎn)為終點(diǎn)的最大路徑。以當(dāng)前節(jié)點(diǎn)為終點(diǎn)的最大路徑的值就是當(dāng)前節(jié)點(diǎn)的值加上左子樹最大路徑的值或右子樹最大路徑的值,看哪邊大,而且左子樹右子樹結(jié)果必須大于0.要不然不用加。然后遍歷過程中,最大路徑就是當(dāng)前節(jié)點(diǎn)加上左邊和右邊(也得滿足大于0)。
python代碼:
import sys
class Solution:
def maxPathSum(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.maxsum = -sys.maxsize
self.helper(root)
return self.maxsum
def helper(self, node):
if not node:
return 0
leftsum = self.helper(node.left)
rightsum = self.helper(node.right)
totalsum = node.val
if leftsum > 0:
totalsum += leftsum
if rightsum > 0:
totalsum += rightsum
if totalsum > self.maxsum:
self.maxsum = totalsum
return node.val + max(max(leftsum, rightsum), 0)