Menu
CoddyTech

Lowest Common Ancestor of a BST

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

lowestCommonAncestor라는 함수를 작성하여 p와 q의 가장 낮은 공통 조상의 값, 즉 두 노드가 모두 하위 트리에 포함되는 가장 깊은 노드의 값을 반환하세요. 노드 자체도 자신의 하위 트리에 포함되므로, 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은 8의 왼쪽 자식이고, 15는 8의 오른쪽에 있는 12 아래에 있습니다. 각각의 노드에서 위로 올라갈 때 둘 다 처음으로 도달하는 노드는 8이므로, 답은 8입니다. 루트인 20도 공통 조상이지만 더 위에 있습니다.

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

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