Menu
CoddyTech

Lowest Common Ancestor of a BST

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

트리에 모두 존재하는 값 p와 q의 가장 낮은 공통 조상의 값을 반환하는 lowestCommonAncestor를 작성하세요. 가장 낮은 공통 조상이란 두 값을 모두 하위 트리에 포함하는 가장 깊은 노드입니다. 노드는 자기 자신의 하위 트리에 포함되므로, p가 q보다 위에 있으면 정답은 p입니다.

함수

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
빈 자리는 -1로 표시한 레벨 순서의 이진 탐색 트리
pinteger
찾을 첫 번째 값
qinteger
찾을 두 번째 값
반환값integer
p와 q를 모두 하위 트리에 포함하는 가장 깊은 노드의 값

제약 조건

  • 1 ≤ tree.length ≤ 32767
  • 각 tree[i]는 -1이거나 0 ≤ tree[i] ≤ 105를 만족하는 값입니다.
  • tree[0]은 절대 -1이 아니므로 트리에는 노드가 하나 이상 있습니다.
  • 배열은 마지막 노드 뒤에 추가 -1 항목이 올 수 있습니다.
  • 비어 있는 위치의 두 자식도 비어 있으며, 깊이는 최대 14입니다.
  • 트리는 유효한 이진 검색 트리이므로 모든 값이 서로 다릅니다.
  • p와 q는 트리의 노드 값입니다. 순서는 임의이며 서로 같을 수도 있습니다.

예제

입력
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
출력
8
설명
3과 15에서 위로 올라가면 두 노드가 처음으로 도달하는 노드는 8입니다. 3은 이 노드의 왼쪽 자식이고, 15는 오른쪽에 있는 12 아래에 있습니다. 루트 20도 공통 조상이지만, 더 위에 있습니다.
challenge icon

후속 질문

p 또는 q가 트리에 없을 수도 있고, 그런 경우 함수가 -1을 반환해야 한다면 무엇을 바꾸시겠어요?

코드 초기화
def lowestCommonAncestor(tree, p, q):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

예상 출력

8