리트코드) 687. 가장 긴 동일 값의 경로(자바)
가장 긴 동일 값의 경로
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);
}
}