Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

이진 트리는 힙 순서에 따라 배열 root에 저장됩니다. 루트는 인덱스 0에 있고, 인덱스 i의 자식은 2*i+1(왼쪽)과 2*i+2(오른쪽)에 있습니다. -1은 비어 있는 위치를 나타내며, 배열 끝에 추가 -1 항목이 있을 수 있습니다.

루트는 열 0에 있습니다. 왼쪽 자식은 부모보다 한 열 왼쪽에, 오른쪽 자식은 한 열 오른쪽에 있습니다. 왼쪽에서 오른쪽 순서로 각 열에 대한 목록을 하나씩 반환하세요. 각 열 안에서는 노드를 위에서 아래 순서로 나열하고, 같은 열과 깊이에 있는 노드는 값의 오름차순으로 나열하세요.

함수

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
힙 순서로 된 트리이며, 빈 자리는 -1입니다
반환값integer-2d-array
열마다 값 목록 하나씩, 가장 왼쪽 열부터 각 열의 위에서 아래 순서로

제약 조건

  • 1 ≤ root.length ≤ 32767
  • 각 root[i]는 -1이거나 0 ≤ root[i] ≤ 5000을 만족하는 값이며, 같은 값이 두 번 나타나지 않습니다.
  • root[0]은 절대 -1이 아니므로 트리에는 노드가 적어도 하나 있습니다.
  • 배열은 마지막 노드 뒤에 추가적인 -1 항목이 올 수 있습니다.
  • 빈 자리의 두 자식도 모두 비어 있으며, 트리의 레벨은 최대 14개입니다.

예제

입력
root = [5, 2, 9, 4, 7, 1, 6]
출력
[[4], [2], [5, 1, 7], [9], [6]]
설명
열 0에는 루트 5가 있고, 두 단계 아래에는 7과 1이 있습니다. 이 두 값은 열과 깊이가 같으므로, 7이 더 왼쪽에 있는데도 1이 7보다 먼저 옵니다.
challenge icon

후속 질문

모든 값은 최대 5000입니다. 이 점을 활용해 비교 정렬을 없애고 O(n + 5000) 시간에 마칠 수 있을까요?

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

테스트 #1

테스트 #2

테스트 #3

인자

root = [5, 2, 9, 4, 7, 1, 6]

예상 출력

[[4], [2], [5, 1, 7], [9], [6]]