https://leetcode.com/problems/binary-tree-maximum-path-sum/
path : 각 인접 노드 쌍들이 연결하는 edge를 가지고 있을 때 이를 path라고 한다. 노드는 sequence에 최대 한 번 나타날 수 있으며 꼭 root를 통해 지나야할 필요는 없다.
path에 있는 node들의 최대 합 반환하기
재귀로 각 노드 기준 path의 합 (leftsum + rightsum + 자기 자신 value) 구하고 제일 큰 값 반환
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution
{
int maxSum;
public int MaxPathSum(TreeNode root)
{
maxSum = int.MinValue;
Traverse(root);
return maxSum;
}
private int Traverse(TreeNode node)
{
if (node == null) return 0;
int leftSum = Math.Max(0, Traverse(node.left));
int rightSum = Math.Max(0, Traverse(node.right));
int pathSum = leftSum + rightSum + node.val;
maxSum = Math.Max(maxSum, pathSum);
return Math.Max(leftSum, rightSum) + node.val;
}
}