Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

같은 이진 트리의 서로 다른 값을 나열하는 두 배열 preorder와 inorder가 주어집니다. 전위 순회는 노드, 왼쪽 서브트리, 오른쪽 서브트리 순으로 방문합니다. 중위 순회는 왼쪽 서브트리, 노드, 오른쪽 서브트리 순으로 방문합니다.

트리를 재구성하고 레벨 순서대로 배열에 담아 반환하세요. 루트는 인덱스 0에, 인덱스 i의 자식은 2i+1(왼쪽)과 2i+2(오른쪽)에 배치하고, 비어 있는 모든 위치에는 -1을 넣습니다. 배열은 마지막 노드에서 끝나며, 뒤에 -1을 붙이지 않습니다.

함수

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
전위 순회의 값: 노드, 왼쪽 하위 트리, 오른쪽 하위 트리
inorderinteger-array
중위 순회의 값: 왼쪽 하위 트리, 노드, 오른쪽 하위 트리
반환값integer-array
레벨 순서로 나타낸 트리이며, 빈 위치는 -1로 표시하고 끝에는 -1을 붙이지 않음

제약 조건

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104이고, 모든 값은 서로 다릅니다.
  • inorder에는 동일한 값이 들어 있으며, 두 배열은 동일한 이진 트리를 나타냅니다.
  • 트리의 깊이는 최대 14이므로, 답에 있는 모든 인덱스는 214-1 = 16383보다 작습니다.

예제

입력
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
출력
[7, 3, 4, 0, 9, -1, 6]
설명
전위 순회는 루트인 7에서 시작합니다. 이 값은 inorder에서 3번째 위치에 있으므로, 0, 3, 9는 왼쪽으로 가고 4, 6은 오른쪽으로 갑니다. 4에는 오른쪽 자식인 6만 있으므로, 인덱스 5는 -1로 유지됩니다.
challenge icon

후속 질문

명시적 스택을 사용해 preorder를 한 번 순회하면서 재귀 없이 트리를 다시 구성할 수 있나요?

코드 초기화
def buildTree(preorder, inorder):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

인자들

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

예상 출력

[7, 3, 4, 0, 9, -1, 6]