학습
시험

[대표 유형] 트리 전위 순회

난이도
INTERMEDIATE

문제 설명

1번 노드를 루트 노드로 하는 이진 트리(Binary Tree) 정보인 childNodes가 매개변수로 주어집니다. 해당 이진 트리에 대해 전위(Preorder) 순회하고, 방문한 순서대로 노드 번호를 반환하는 solution 함수를 작성하시오.


개념 설명

트리 순회(Tree Traversal)는 이진 트리(Binary Tree)에서 정의되는 그래프 순회 방법입니다.
먼저 이진 트리는 모든 내부 노드 들이 둘 이하의 자식 노드를 갖는 트리를 말합니다. 이진 트리의 경우 왼쪽 자식 노드와 오른쪽 자식 노드를 구분하기도 합니다.

트리 순회 중 전위 순회(Preorder Traverse)는 다음과 같은 순서로 트리 순회를 진행합니다.

  1. 루트 노드를 탐색합니다.
  2. 왼쪽 자식 부분 트리를 재귀적으로 전위 순회합니다.
  3. 오른쪽 자식 부분 트리를 재귀적으로 전위 순회합니다.

아래와 같은 이진 트리가 있다고 가정합니다.

이때 전위 순회는 다음과 같이 작동합니다.
먼저 루트 노드인 1번 노드를 탐색합니다.

이후 왼쪽 자식 부분 트리를 전위 순회합니다. 1번 노드의 왼쪽 자식 부분 트리의 루트 노드는 2번 노드입니다.

다시 2번 노드의 왼쪽 자식 부분 트리를 전위 순회합니다. 따라서 5번 노드를 탐색합니다.

5번 노드를 탐색한 이후에 5번 노드의 왼쪽 자식을 순회하고자 하였지만 5번 노드는 왼쪽 자식이 없습니다.

이러한 경우 5번 노드의 오른쪽 자식 부분 트리 순회로 넘어갑니다.

4번 노드를 탐색한 이후, 4번 노드는 자식 노드가 없으므로 트리 순회를 종료합니다. 이에 재귀적으로 이전에 호출된 5번 노드로 돌아가지만 5번 노드도 오른쪽 자식 노드의 순회를 마친 뒤 순회가 종료됩니다.
하지만 2번 노드는 아직 오른쪽 자식 부분 트리 순회가 필요하므로 4번 노드 이후에 탐색 되는 노드는 7번 노드입니다.

이후 차례로 6번 노드와 8번 노드를 탐색하며 다시 재귀적으로 순회를 마치게 됩니다. 하지만 1번 노드의 오른쪽 자식 부분 트리는 순회가 필요하므로 3번 노드를 탐색합니다.

따라서 주어진 예시에서 전위 순회를 하는 순서는 1 →\rightarrow 2 →\rightarrow 5 →\rightarrow 4 →\rightarrow 7 →\rightarrow 6 →\rightarrow 8 →\rightarrow 3 입니다.


제한 사항

  • childNodes는 각 노드의 왼쪽과 오른쪽 자식 노드 정보를 담는 이차원 배열입니다.

    • 배열의 길이는 2 이상 100,000 이하입니다.

    • childNodes[i - 1]는 i번 노드의 왼쪽과 오른쪽 자식 노드의 번호를 담은 배열입니다.

      • childNodes[i - 1][0]은 i번 노드의 왼쪽 자식 번호를 의미합니다.

      • childNodes[i - 1][1]은 i번 노드의 오른쪽 자식 번호를 의미합니다.

      • 만일 왼쪽 또는 오른쪽 자식 노드가 없다면 해당 노드 번호는 -1로 표기됩니다.


예시 테스트케이스 설명

테스트케이스 번호 childNodes return
1 [[2,3],[5,7],[-1,-1],[-1,-1],[-1,4],[-1,8],[6,-1],[-1,-1]] [1,2,5,4,7,6,8,3]
2 [[8,6],[-1,-1],[5,-1],[-1,-1],[-1,-1],[10,9],[2,-1],[4,-1],[7,3],[-1,-1]] [1,8,4,6,10,9,7,2,3,5]
3 [[5,-1],[3,-1],[-1,-1],[-1,2],[-1,4]] [1,5,4,2,3]

1번 테스트케이스 설명

  • 개념 설명에서 제시된 예시와 동일합니다.

2번 테스트케이스 설명

  • 전위 순회 결과는 아래와 같습니다.
    1 →\rightarrow 8 →\rightarrow 4 →\rightarrow 6 →\rightarrow 10 →\rightarrow 9 →\rightarrow 7 →\rightarrow 2 →\rightarrow 3 →\rightarrow 5

3번 테스트케이스 설명

  • 전위 순회 결과는 아래와 같습니다.
    1 →\rightarrow 5 →\rightarrow 4 →\rightarrow 2 →\rightarrow 3