1 minute read

가장 긴 동일 값의 경로

https://leetcode.com/problems/longest-univalue-path

문제 : 이진 트리의 루트가 주어지면 경로의 각 노드가 동일한 값을 갖는 가장 긴 경로의 길이를 반환합니다.
이 경로는 루트를 통과할 수도 있고 통과하지 않을 수도 있습니다.

예시 1

입력: root = [5,4,5,1,1,null,5]
출력: 2
설명: 표시된 이미지는 동일한 값(예: 5)의 가장 긴 경로를 보여줍니다.

예시 1

입력: root = [1,4,5,4,4,null,5]
출력: 2
설명: 표시된 이미지는 동일한 값(예: 4)의 가장 긴 경로를 보여줍니다.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int longest = 0;
    public int longestUnivaluePath(TreeNode root) {      
        calc(root);
        return longest;
    }

    public int calc(TreeNode root) {
        if(root == null) { 
            return 0;
        }
        // 두 노드간 값이 같은 것의 거리       
        // 값이 달라도 계속 나아가야함
        int left = calc(root.left);
        int right = calc(root.right);
        // 임시값
        int tl = 0;
        int tr = 0;
        if(root.left != null) {
            if(root.val == root.left.val) {
                tl = tl+left+1;
            }   
        } 
        if(root.right != null) {
            if(root.val == root.right.val) {
                tr = tr+right+1;
            }
        } 
        
        longest = Math.max(longest, tl+tr); 
        
        return Math.max(tl, tr);
        
    }
}