
BST(이진 검색 트리)의 루트가 주어지면 트리에 있는 두 개의 다른 노드 값 간의 최소 절대 차이를 반환합니다.
2개의 노드를 구한 후 두 노드의 차이의 절댓값을 구한다.
재귀 함수를 사용하기 때문에 필드에 2개의 값을 선언한다.
하나는 결과값을 리턴할 int result = Integer.MAX_VALUE;
하나는 value를 저장할 Integer value = null;
베이스 조건은 매개변수로 주어진 node 가 null 일 경우 return
왼쪽 끝부터 탐색하기 위해 재귀 함수에 파라미터로 node.left 를 넣어준다.
value 의 초기값은 null 이다.
조건문으로 value 가 null 이 아니라면 value - node.val 의 절댓값을 계산해주고 비교하여 result 에 담아준다.
해당 조건문 여부와 상관없이 value 를 node.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);
}
}
