Menu
CoddyTech

Subtree of Another Tree

두 개의 이진 트리 root와 subRoot가 주어집니다. 각 트리는 레벨 순서대로 배열에 저장되어 있습니다. 루트는 인덱스 0에 있고, 인덱스 i의 자식은 2*i+1(왼쪽)과 2*i+2(오른쪽)에 있으며, 빈 위치는 -1로 표시됩니다. 배열은 끝에 여분의 -1 항목이 포함된 채 끝날 수도 있습니다.

root의 어떤 노드와 그 노드의 모든 자손이 subRoot와 모양과 값이 정확히 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. root 전체도 해당됩니다.

함수

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
검색할 트리. 레벨 순서로 표시하며, 빈 자리는 -1로 나타냅니다.
subRootinteger-array
찾아야 할 트리, 동일한 형식으로
반환값boolean
true: subRoot가 모든 자손을 포함하는 노드로 루트에 나타나는 경우, 그렇지 않으면 false

제약 조건

  • 1 ≤ root.length ≤ 32767 그리고 1 ≤ subRoot.length ≤ 32767
  • 각 항목은 -1이거나 0부터 104까지의 값입니다.
  • root[0]과 subRoot[0]은 절대 -1이 아니므로 두 트리 모두 노드가 하나 이상 있습니다.
  • 어느 배열이든 마지막 노드 뒤에 추가 -1 항목이 올 수 있습니다.
  • 빈 자리의 두 자식도 모두 비어 있으며, 각 트리의 깊이는 최대 14입니다.
  • 값은 반복될 수 있습니다.

예제

입력
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
출력
true
설명
인덱스 1의 노드 2에는 자식 1과 3이 있으며, 둘 다 리프입니다. 이것이 바로 subRoot입니다.
challenge icon

후속 질문

값과 자식들의 지문을 사용해 모든 하위 트리의 지문을 만들면, subRoot와의 비교 비용을 O(1)로 만들 수 있을까요? 서로 다른 두 하위 트리의 지문이 충돌하면 어떻게 해야 할까요?

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

테스트 #1

테스트 #2

테스트 #3

인자들

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

예상 출력

true