<Hard> Binary Tree Maximum Path Sum (LeetCode : C#)

이도희·2023년 4월 30일
0

알고리즘 문제 풀이

목록 보기
70/185

https://leetcode.com/problems/binary-tree-maximum-path-sum/

📕 문제 설명

path : 각 인접 노드 쌍들이 연결하는 edge를 가지고 있을 때 이를 path라고 한다. 노드는 sequence에 최대 한 번 나타날 수 있으며 꼭 root를 통해 지나야할 필요는 없다.

path에 있는 node들의 최대 합 반환하기

  • Input
    이진 트리의 root
  • Output
    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;
    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글