
난이도: ★★☆☆☆ • solved on: 2025-12-07

WARNING!
이 문제의 경우, Hackerrank의 테스트 구조에 문제가 생겨 직접 submission을 하지는 못했습니다.
Hackerrank는 기본적으로 Solution Class를 통해 우리의 코드를 점검함
그런데 이 문제는 Solution Class가 없고 대신 Tree Class가 있음
그러면 정상적인 흐름은 테스트 코드는 Tree로 인식을 하고 해야함. 하지만 이 문제에서는 여전히 Solution Class를 찾고 있음 (???)
그래서 결론적으로 아래와 같은 오류가 발생함 (하지만 이건 boilertemplate 설정의 영향이 커 다른 언어를 안다면 그것으로 진행하면 된다.)
자료구조
알고리즘/기법
핵심 키워드
boolean checkBST(Node root) {
if(root == null){
return false;
}
if(root.left != null){
if(root.data < root.left.data){
return false;
} else {
return checkBST(root.left);
}
}
if(root.right != null){
if(root.right.data < root.data){
return false;
} else {
return checkBST(root.right);
}
}
return true;
}
① 자식 노드와의 비교만 수행함 (즉 바로 위의 부모 노드에 대한 검증만 한다)
BST는 “왼쪽 subtree 전체 < root, 오른쪽 subtree 전체 > root”가 기준이다.
위 코드는 직접 자식만 비교하기 때문에 subtree 깊은 곳의 위반을 검출할 수 없다.
예:
10
/
5
\
20 ← BST 위반
20은 10보다 크므로 BST 위반이지만 내 코드는 통과시킨다.
② null을 false로 처리하여 leaf 자식에서 잘못된 결과 발생
BST 여부 판정에서 null은 정상 종료 지점이다.
따라서 true여야 하지만 내 코드는 false를 반환한다.
min < node.data < max)의 범위 내에 있어야 한다.min, root.data)root.data, max)boolean checkBST(Node root) {
return validate(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
boolean validate(Node node, int min, int max) {
if (node == null) {
return true;
}
if (node.data <= min || node.data >= max) {
return false;
}
return validate(node.left, min, node.data)
&& validate(node.right, node.data, max);
}
문제에서 애초에 추가적인 helper function이 필요할거라고 넌지시 힌트를 준다.
Hidden stub code will pass a root argument to the function below. Complete the function to solve the challenge. Hint: you may want to write one or more helper functions.
validate(node, min, max):
1. node가 null이면 true
2. node.data가 (min, max) 범위를 벗어나면 false
3. 왼쪽 subtree → (min, node.data)
4. 오른쪽 subtree → (node.data, max)
5. 두 subtree 모두 true면 BST
참고 블로그/깃허브: 없음
비슷한 유형 (GPT 추천) :
확장 문제 (GPT 추천) :