Binary Tree Maximum Path Sum

HardDynamic ProgrammingTreeDepth-First SearchBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function maxPathSum(root: TreeNode | null): number {
  let answer = Number.MIN_SAFE_INTEGER;
 
  function maxPathSumSubTree(node: TreeNode | null): number {
    if (node === null) {
      return 0;
    }
 
    const leftPathSum = Math.max(0, maxPathSumSubTree(node.left));
    const rightPathSum = Math.max(0, maxPathSumSubTree(node.right));
 
    answer = Math.max(answer, node.val + leftPathSum + rightPathSum);
 
    return node.val + Math.max(leftPathSum, rightPathSum);
  }
  maxPathSumSubTree(root);
 
  return answer;
}