Menu
CoddyTech

Boundary Traversal of Binary Tree

보통트리 순회python iconjava iconcpp iconc iconjs icon+10

배열 root에는 이진 트리가 레벨 순서로 저장됩니다. 루트는 인덱스 0에 있고, 인덱스 i의 자식은 2i+1(왼쪽)과 2i+2(오른쪽)에 있으며, 빈 자리는 -1로 표시하고 끝에 -1 항목이 추가로 있을 수도 있습니다. 리프는 자식이 없는 노드입니다.

루트부터 시작해 반시계 방향으로 경계 노드들을 반환하세요.

  1. 루트.
  2. 왼쪽 경계: 위에서 아래 순서로 나열합니다. 루트의 왼쪽 자식부터 시작해, 왼쪽 자식이 있으면 왼쪽 자식으로 이동하고, 없으면 오른쪽 자식으로 이동합니다. 리프에 도달하기 전에 멈춥니다.
  3. 모든 리프를 왼쪽에서 오른쪽 순서로 나열합니다.
  4. 오른쪽 경계: 아래에서 위 순서로 나열합니다. 루트의 오른쪽 자식부터 시작하며, 왼쪽 경계와 대칭입니다.

어떤 노드도 두 번 나열되지 않으므로, 노드가 하나인 트리에서는 루트만 반환합니다.

함수

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
레벨 순서의 이진 트리이며, 빈 자리는 -1로 표시합니다
반환값integer-array
루트에서 반시계 방향으로 경계 값

제약 조건

  • 1 ≤ root.length ≤ 32767
  • 각 root[i]는 -1이거나 0 ≤ root[i] ≤ 105인 값입니다.
  • root[0]은 절대 -1이 아니므로 트리에는 노드가 하나 이상 있습니다.
  • 배열은 마지막 노드 뒤에 -1 항목이 더 있는 상태로 끝날 수 있습니다.
  • 빈 자리의 두 자식도 모두 비어 있으며, 깊이는 최대 14입니다.
  • 노드 값은 서로 다릅니다.

예제

입력
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
출력
[7, 3, 1, 4, 6, 8, 9]
설명
루트 7 다음의 왼쪽 경계는 3입니다. 그 자식인 1은 리프입니다. 리프는 1, 4, 6, 8입니다. 오른쪽 경계는 9이며, 리프 8 위에 있습니다.
challenge icon

후속 질문

경계를 시계 방향으로 나열하려면 어떻게 해야 할까요? 루트, 오른쪽 가장자리를 위에서 아래로, 잎을 오른쪽에서 왼쪽으로, 그런 다음 왼쪽 가장자리를 아래에서 위로 나열하면 됩니다.

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

테스트 #1

테스트 #2

테스트 #3

인자

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

예상 출력

[7, 3, 1, 4, 6, 8, 9]