Menu
CoddyTech

Range Sum of BST

이진 탐색 트리는 배열 tree에 레벨 순서로 저장됩니다. 루트는 인덱스 0에 있고, 인덱스 i에 있는 노드의 자식은 2*i+1(왼쪽)과 2*i+2(오른쪽)에 있으며, -1은 비어 있는 위치를 나타냅니다. 이진 탐색 트리에서는 노드의 왼쪽 하위 트리에 있는 모든 값이 노드의 값보다 작고, 오른쪽 하위 트리에 있는 모든 값이 노드의 값보다 큽니다.

low ≤ v ≤ high를 만족하는 모든 노드 값 v의 합을 반환하고, 해당 값이 없으면 0을 반환하세요.

함수

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
빈 위치는 -1로 표시한 레벨 순서의 이진 검색 트리
lowinteger
셀 가장 작은 값
highinteger
셀 최댓값
반환값integer
low와 high 사이의 노드 값의 합(양 끝값 포함)

제약 조건

  • 1 ≤ tree.length ≤ 32767
  • 각 tree[i]는 -1이거나 0 ≤ tree[i] ≤ 105를 만족하는 값입니다.
  • tree[0]은 절대로 -1이 아니므로 트리에는 노드가 적어도 하나 있습니다.
  • 배열은 마지막 노드 뒤에 여분의 -1 항목이 있을 수 있습니다.
  • 빈 위치의 두 자식도 모두 비어 있으며, 깊이는 최대 14입니다.
  • 이 트리는 유효한 이진 검색 트리이므로 모든 값이 서로 다릅니다.
  • 0 ≤ low ≤ high ≤ 105
  • 답은 32비트 부호 있는 정수에 들어갑니다.

예제

입력
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
출력
88
설명
9부터 31까지의 값은 10, 12, 15, 20 및 31이며, 이 값들의 합은 88입니다. 3, 8 및 40은 범위를 벗어납니다.
challenge icon

후속 질문

같은 트리에서 서로 다른 (low, high) 쿼리 수천 개에 답해야 한다면, 각 쿼리에 O(log n) 시간 안에 어떻게 답할 수 있을까요?

코드 초기화
def rangeSumBST(tree, low, high):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]
low = 9
high = 31

예상 출력

88