Binary Tree Maximum Path Sum
https://leetcode.com/problems/binary-tree-maximum-path-sum/
Utilizes postorder traversal (or DFS).
maxPath = -float("inf")
def gainFromSubtree(node):
nonlocal maxPath
if not node:
return 0
gainFromLeft = max(gainFromSubtree(node.left), 0)
gainFromRight = max(gainFromSubtree(node.right), 0)
maxPath = max(maxPath, gainFromLeft + gainFromRight + node.val)
return max(gainFromLeft + node.val, gainFromRight + node.val)
gainFromSubtree(root)
return maxPath