Menu
CoddyTech

Range Sum of BST

레벨 순서로 배열 tree에 저장된 이진 탐색 트리와 두 숫자 low 및 high가 주어집니다. 루트는 인덱스 0에 있고, 인덱스 i에 있는 노드의 자식은 2*i+1(왼쪽)과 2*i+2(오른쪽)에 있으며, -1은 비어 있는 위치를 나타내고, 배열은 끝에 추가 -1 항목이 올 수 있습니다. 이진 탐색 트리에서는 노드의 왼쪽 하위 트리에 있는 모든 값이 노드의 값보다 작고, 오른쪽 하위 트리에 있는 모든 값은 더 큽니다.

rangeSumBST라는 함수를 작성하여 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은 범위에 포함되지 않습니다.

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

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