Menu
CoddyTech

Kth Smallest Element in a BST

힙 순서의 배열 root로 이진 탐색 트리가 주어집니다. 루트는 인덱스 0에 있고, 인덱스 i의 자식은 2*i+1(왼쪽)과 2*i+2(오른쪽)에 있으며, -1은 빈 위치를 나타냅니다. 배열 끝에 추가적인 -1 항목이 있을 수 있습니다. 각 노드에서 왼쪽 서브트리에는 더 작은 값만 있고 오른쪽 서브트리에는 더 큰 값만 있습니다.

트리에서 1부터 세었을 때 k번째로 작은 값을 반환하세요.

함수

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
빈 위치에는 -1을 사용한 이진 탐색 트리의 레벨 순서
kinteger
오름차순으로 찾을 위치(1부터 시작)
반환값integer
트리에서 k번째로 작은 값

제약 조건

  • 1 ≤ root.length ≤ 32767
  • 각 root[i]는 -1이거나 0 ≤ root[i] ≤ 105를 만족하는 값입니다.
  • root[0]은 절대 -1이 아니므로 트리에는 노드가 하나 이상 있습니다.
  • 배열은 마지막 노드 뒤에 추가 -1 항목을 포함할 수 있습니다.
  • 빈 자리의 두 자식도 모두 비어 있으며, 깊이는 최대 14입니다.
  • 정렬 규칙은 모든 노드에서 성립하므로, 같은 값이 두 번 나타나지 않습니다.
  • 1 ≤ k ≤ 트리의 노드 수.

예제

입력
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
출력
29
설명
값을 오름차순으로 나열하면 6, 17, 22, 29, 41, 65, 90이고, 네 번째 값은 29입니다. 이는 루트의 왼쪽 하위 트리에 있는 네 값 중 가장 큰 값입니다.
challenge icon

후속 질문

트리가 자주 바뀌고 k번째로 작은 값을 여러 번 찾아야 한다면, 모든 질의가 O(h) 시간이 걸리도록 각 노드에 무엇을 저장할 수 있을까요?

코드 초기화
def kthSmallest(root, k):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

인자들

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

예상 출력

29