BST의 기본 형식(좌측 노드는 현재 노드보다 작아야 하며 우측 노드는 현재 노드보다 커야함)을 이해하고 있으면 쉽게 풀이가 가능한 문제이다.
올바른 BST인지 판별하면 끝
function isValidBST(root: TreeNode | null): boolean {
// 재귀적으로 BST를 검증하는 헬퍼 함수
// min과 max는 현재 노드가 가질 수 있는 값의 범위를 나타냄
function validate(node: TreeNode | null, min: number, max: number): boolean {
// 기저 조건: null 노드는 유효한 BST로 간주
if (node === null) return true;
// 현재 노드의 값이 주어진 범위를 벗어나면 false
if (node.val <= min || node.val >= max) {
return false;
}
// 왼쪽 서브트리 검사: 모든 노드는 현재 노드보다 작아야 함
// 오른쪽 서브트리 검사: 모든 노드는 현재 노드보다 커야 함
return validate(node.left, min, node.val) &&
validate(node.right, node.val, max);
}
// 초기 호출: 값의 범위를 숫자의 최소값과 최대값으로 설정
return validate(root, -Infinity, Infinity);
}