이진 트리의 루트 root가 주어져요. 이 트리가 이진 탐색 트리(BST)이면 true, 아니면 false를 반환해요.
이진 탐색 트리는 모든 노드에서 왼쪽 서브트리의 모든 값이 자기 값보다 작고, 오른쪽 서브트리의 모든 값이 자기 값보다 커야 해요. 바로 아래 두 자식만 보는 것으로는 부족해요. 손자 이하도 조건을 지켜야 해요.
값은 모두 서로 다르다고 가정해요. 빈 트리는 유효한 BST예요.
트리는 레벨 순서 배열로 주어져요. null은 자식이 없다는 뜻이고, 채점기가 이 배열을 노드로 바꿔서 root로 넘겨줘요. 노드는 val, left, right를 가지며, 새 노드가 필요하면 TreeNode로 만들 수 있어요.
예시
예시 1
예시 2
예시 3
제한 사항
- 노드 개수는 0개 이상 10,000개 이하예요.
- -100,000 ≤ node.val ≤ 100,000
- 모든 값은 서로 달라요.
노드마다 '이 값이 들어갈 수 있는 범위'를 물려주세요. 왼쪽으로 내려가면 상한이 부모 값으로 좁혀지고, 오른쪽으로 내려가면 하한이 부모 값으로 좁혀져요. 중위 순회 결과가 오름차순인지 보는 방법도 있어요.
javascriptCopy codefunction isValidBST(root) {const check = (node, low, high) => {if (node === null) return true;if (low !== null && node.val <= low) return false;if (high !== null && node.val >= high) return false;return check(node.left, low, node.val) && check(node.right, node.val, high);};return check(root, null, null);}
예시 테스트만 실행 (Cmd/Ctrl+Enter)
숨김 테스트까지 채점 (Cmd/Ctrl+Shift+Enter)
에디터를 불러오고 있어요…
코드를 작성하고Ctrl↵를 눌러 예시 테스트를 확인해 보세요.