Menu
CoddyTech

Validate Binary Search Tree

레벨 순서로 배열 tree에 저장된 이진 트리가 주어집니다. 루트는 인덱스 0에 있고, 인덱스 i에 있는 노드의 자식은 2*i+1(왼쪽)과 2*i+2(오른쪽)에 있으며, -1은 비어 있는 위치를 나타내고, 배열은 끝에 여분의 -1 항목이 있을 수 있습니다.

isValidBST라는 함수를 작성하세요. 트리가 이진 탐색 트리이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이진 탐색 트리에서는 모든 노드의 값이 왼쪽 하위 트리의 모든 값보다 엄격히 크고 오른쪽 하위 트리의 모든 값보다 엄격히 작아야 합니다. 유효한 트리에는 같은 값이 두 개 있을 수 없습니다.

함수

isValidBST(tree: integer-array) → boolean
treeinteger-array
이진 트리를 레벨 순서로 나타내며, 빈 자리는 -1로 표시합니다
반환값boolean
트리가 이진 탐색 트리이면 true이고, 그렇지 않으면 false입니다

제약 조건

  • 1 ≤ tree.length ≤ 32767
  • 각 tree[i]는 -1이거나 0 ≤ tree[i] ≤ 105인 값입니다.
  • tree[0]는 절대 -1이 아니므로 트리에는 노드가 하나 이상 있습니다.
  • 배열은 마지막 노드 이후에 -1 항목이 더 포함된 채 끝날 수 있습니다.
  • 빈 자리의 두 자식도 모두 비어 있고, 깊이는 최대 14입니다.
  • 값은 반복될 수 있습니다.

예제

입력
tree = [8, 3, 12, 1, 6, 10, 15]
출력
true
설명
각 노드는 자신보다 위에 있는 모든 노드의 올바른 쪽에 있습니다. 순서대로(왼쪽 하위 트리, 노드, 오른쪽 하위 트리) 읽으면 값은 1, 3, 6, 8, 10, 12, 15로 나오며, 엄격히 증가합니다. 이것이 탐색 트리가 제공하는 것입니다.

lock icon제출 시 숨은 테스트 +16개

challenge icon

후속 질문

인덱스 i에 있는 노드의 부모는 (i-1)/2에 있으며, 소수점 이하는 버립니다. 스택을 유지하거나 재귀하는 대신 부모를 따라 이동하면서 O(1)의 추가 공간으로 트리를 순회할 수 있을까요?

코드 초기화
def isValidBST(tree):
    # 여기에 코드를 작성하세요
테스트 케이스

케이스 1

케이스 2

케이스 3

입력

tree = [8, 3, 12, 1, 6, 10, 15]

기대값

true