[LeetCode] 530. Minimum Absolute Difference in BST

lkdcode·2023년 9월 6일
0

Algorithm

목록 보기
28/47
post-thumbnail

530. Minimum Absolute Difference in BST


문제 분석

BST(이진 검색 트리)의 루트가 주어지면 트리에 있는 두 개의 다른 노드 값 간의 최소 절대 차이를 반환합니다.


풀이 과정

2개의 노드를 구한 후 두 노드의 차이의 절댓값을 구한다.
재귀 함수를 사용하기 때문에 필드에 2개의 값을 선언한다.

하나는 결과값을 리턴할 int result = Integer.MAX_VALUE;
하나는 value를 저장할 Integer value = null;

베이스 조건은 매개변수로 주어진 nodenull 일 경우 return
왼쪽 끝부터 탐색하기 위해 재귀 함수에 파라미터로 node.left 를 넣어준다.
value 의 초기값은 null 이다.
조건문으로 valuenull 이 아니라면 value - node.val 의 절댓값을 계산해주고 비교하여 result 에 담아준다.

해당 조건문 여부와 상관없이 valuenode.val 로 업데이트 해주고 재귀 함수를 호출한다.
node.right 를 매개변수로 넣어준다.

ex) [4,2,6,1,3]

콘솔에 찍어본 결과. 4,2,1 왼쪽으로 탐색을 하고 첫 리프노드인 1을 발견하고서는
value, result 값들이 갱신이 된다.
node.val:3 인 경우는 이미 2-1 이 계산되고 2가 value로 업데이트된 것이다.


나의 생각

트리는 재귀로 이루어져 있고 탐색, 삭제 등의 연산들을 재귀적으로 접근할 수 있다.
해당 문제는 재귀 함수를 사용할 때의 기본적인 순차를 묻는 것 같다.


코드

class Solution {
    private Integer value = null;
    private int result = Integer.MAX_VALUE;
    
    public int getMinimumDifference(TreeNode root) {
        search(root);
        return result;
    }
    
    private void search(TreeNode node) {
        if (node == null) return;
        
        search(node.left);
        
        if (value != null) result = Math.min(result, Math.abs(value - node.val));
        value = node.val;

        search(node.right);
    }

}

profile
되면 한다

0개의 댓글