https://leetcode.com/problems/validate-binary-search-tree/description/
Binary Search Tree가 유효한지 검사하는 문제다.
이진 탐색 트리에서 왼쪽 서브트리의 모든 노드는 루트보다 작아야 하고,
오른쪽 서브트리의 모든 노드는 루트보다 커야 한다.
그러므로 재귀적으로 풀 때 min, max값을 갱신해가며 풀어주면 된다.
각 재귀마다 루트값을 기준으로 min, max를 결정하며, 끝 부분과 min/max 사이에 있는 값인지 검사하면 논리적으로 맞다.
class Solution {
public boolean isValidBST(TreeNode root) {
return check(root, null, null);
}
private boolean check(TreeNode node, Integer min, Integer max) {
if (node == null) {
return true;
}
if (min != null && min >= node.val) {
return false;
}
if (max != null && max <= node.val) {
return false;
}
return check(node.left, min, node.val) && check(node.right, node.val, max);
}
}