Problem
Complete the preOrder function in the editor below, which has 1 parameter: a pointer to the root of a binary tree. It must print the values in the tree's preorder traversal as a single line of space-separated values.
Input Format
Our test code passes the root node of a binary tree to the preOrder function.
Constraints
1 ≤ Nodes in the tree ≤ 500
Output Format
Print the tree's preorder traversal as a single line of space-separated values.
Sample Input
1
\
2
\
5
/ \
3 6
\
4
Sample Output
1 2 5 3 4 6
Explanation
The preorder traversal of the binary tree is printed.
preOrder 함수를 완성하세요. 이 함수는 이진 트리의 루트 노드를 가리키는 포인터 하나를 매개변수로 받습니다. 이 함수는 트리의 전위 순회 결과를 한 줄로 출력해야 합니다. 각 노드의 값을 공백으로 구분하여 출력하세요.
입력 형식
테스트 코드가 이진 트리의 루트 노드를 preOrder 함수에 전달합니다.
제약 사항
- 트리의 노드 개수는 1 이상 500 이하입니다.
출력 형식
트리의 전위 순회 결과를 공백으로 구분하여 한 줄로 출력합니다.
Solution
/* you only have to complete the function given below.
Node is defined as
class Node {
int data;
Node left;
Node right;
}
*/
public static void preOrder(Node root) {
if (root == null) {
return;
}
System.out.print(root.data + " ");
preOrder(root.left);
preOrder(root.right);
}
이 코드는 전위 순회를 수행하여, 현재 노드 -> 왼쪽 자식 -> 오른쪽 자식 순으로 탐색합니다.
위 preOrder 함수는 이진 트리를 전위 순회 방식으로 탐색하는 재귀적인 접근 방식을 사용하여 구현되었습니다. 전위 순회(pre-order traversal)는 현재 노드를 먼저 방문한 후, 왼쪽 자식 노드와 오른쪽 자식 노드를 순서대로 방문하는 탐색 방법입니다.
public static void preOrder(Node root) {
if (root == null) {
return;
}
System.out.print(root.data + " ");
preOrder(root.left);
preOrder(root.right);
}
- 종료 조건: if (root == null) { return; }
- 이 부분은 재귀 호출의 종료 조건으로, 현재 노드 root가 null이면 함수가 아무 작업도 하지 않고 종료됩니다.
- 트리의 잎 노드(leaf node)에 도달한 경우, 그 아래에는 자식 노드가 없으므로 root가 null일 때 바로 리턴하여 재귀 호출을 멈춥니다.
- 현재 노드 방문: System.out.print(root.data + " ");
- 전위 순회 방식에 따라, 먼저 현재 노드의 data 값을 출력합니다.
- 이 출력은 공백으로 구분되며, 하나의 줄에 모든 노드 값을 출력하게 됩니다.
- 왼쪽 자식 노드 방문: preOrder(root.left);
- 현재 노드의 왼쪽 자식 노드를 재귀적으로 호출하여 방문합니다.
- 전위 순회에서는 항상 왼쪽 자식 노드를 먼저 탐색하므로, 이 호출이 오른쪽 자식 노드 호출보다 앞에 위치합니다.
- 오른쪽 자식 노드 방문: preOrder(root.right);
- 왼쪽 자식 노드를 다 방문한 후, 현재 노드의 오른쪽 자식 노드를 재귀적으로 호출하여 방문합니다.
- 이로써 전위 순회의 "현재 노드 -> 왼쪽 -> 오른쪽" 순서가 완성됩니다.
트리가 다음과 같을 때,
1
\
2
\
5
/ \
3 6
\
4
전위 순회 과정은 다음 순서로 진행됩니다:
- 노드 1 방문 → 출력: 1
- 노드 2 방문 → 출력: 1 2
- 노드 5 방문 → 출력: 1 2 5
- 노드 3 방문 → 출력: 1 2 5 3
- 노드 4 방문 → 출력: 1 2 5 3 4
- 노드 6 방문 → 출력: 1 2 5 3 4 6
최종 출력 결과는 1 2 5 3 4 6이 됩니다.
시간 및 공간 복잡도
- 시간 복잡도: O(n), 여기서 n은 트리의 노드 개수입니다. 각 노드를 한 번씩 방문하기 때문입니다.
- 공간 복잡도: O(h), 여기서 h는 트리의 높이입니다. 재귀 호출을 사용할 때 호출 스택의 최대 깊이는 트리의 높이에 비례합니다.

'코딩 테스트' 카테고리의 다른 글
[HackerRank] No Prefix Set (4) | 2024.11.12 |
---|---|
[HackerRank] Tree: Huffman Decoding (18) | 2024.11.11 |
[HackerRank] Breadth First Search: Shortest Reach (2) | 2024.11.10 |
[HackerRank] Jesse and Cookies (0) | 2024.11.10 |
[HackerRank] Lego Blocks (7) | 2024.11.08 |