포스트

Minimum Absolute Difference in BST

LeetCode 530. Minimum Absolute Difference in BST

원문

Given the root of a Binary Search Tree (BST), return the minimum absolute difference between the values of any two different nodes in the tree.

풀이

BST는 모든 노드에서 왼쪽 하위 노드의 값은 그 노드의 값보다 작고, 오른쪽 하위 노드의 값은 그 노드의 값보다 크다.
따라서 정렬된 상태라고 봐도 무방하므로 각 노드의 값 사이의 차이의 최소를 구하려면 인접한 노드 사이의 값 차이만 비교하면 된다.

코드

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution:
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        global before, result
        before, result = None, int(1e9)
        self.calculate(root)
        return result
    

    def calculate(self, node: Optional[TreeNode]):
        if node is None: return
        global before, result

        self.calculate(node.left)
        if before:
            result = min(result, node.val - before.val)
        before = node
        self.calculate(node.right)

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    private int result = Integer.MAX_VALUE;
    private TreeNode before = null;

    private void calculate(TreeNode node) {
        if (node == null) {
            return;
        }
        calculate(node.left);
        if (before != null) {
            result = Math.min(result, node.val - before.val);
        }
        before = node;
        calculate(node.right);
    }

    public int getMinimumDifference(TreeNode root) {
        calculate(root);
        return result;
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.