Menu
CoddyTech

Validate Binary Search Tree

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

이진 탐색 트리이면 true를, 그렇지 않으면 false를 반환하는 isValidBST를 작성하세요. 이진 탐색 트리에서는 각 노드의 값이 왼쪽 하위 트리의 모든 값보다 엄격히 크고 오른쪽 하위 트리의 모든 값보다 엄격히 작습니다.

함수

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입니다. 값이 엄격하게 증가하므로 모든 노드는 모든 조상의 올바른 쪽에 있습니다.
challenge icon

후속 질문

A node의 부모는 인덱스 (i-1)/2에 있으며, 내림합니다. 스택이나 재귀 대신 부모를 따라 이동하면서 추가 공간 O(1)로 트리를 중위 순회할 수 있나요?

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

테스트 #1

테스트 #2

테스트 #3

인자

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

예상 출력

true