안녕하세요, GameLabMaster입니다! 코딩 테스트 대비 두 번째 포스팅에서는 이진 트리의 최대 깊이를 구하는 문제를 다루겠습니다. 이 문제는 코딩 테스트에서 자주 나오는 중급 정도의 문제로, 트리 구조에 대한 이해가 필요합니다.
문제
주어진 이진 트리의 최대 깊이를 구하세요. 이진 트리의 최대 깊이란 루트 노드부터 가장 먼 리프 노드까지의 거리를 의미합니다.
예시:
3
/ \
9 20
/ \
15 7
최대 깊이: 3
풀이
이 문제는 재귀적인 방법을 사용하여 해결할 수 있습니다. 각 노드에서 왼쪽과 오른쪽 자식 노드의 깊이를 구한 후, 둘 중 더 큰 값을 선택하고 현재 노드의 깊이 1을 더해주면 됩니다. 이 과정을 루트 노드부터 시작하면 최대 깊이를 구할 수 있습니다.
먼저, 이진 트리의 노드를 표현하기 위해 TreeNode 클래스를 정의하겠습니다.
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
이제 이진 트리의 최대 깊이를 구하는 메서드를 작성해보겠습니다.
public class Solution {
public int MaxDepth(TreeNode root) {
// 기저 조건: 노드가 비어있으면 깊이 0 반환
if (root == null) {
return 0;
}
// 왼쪽과 오른쪽 자식 노드의 깊이를 재귀적으로 구함
int leftDepth = MaxDepth(root.left);
int rightDepth = MaxDepth(root.right);
// 둘 중 더 큰 깊이를 선택하고 현재 노드의 깊이 1을더해줍니다.
return Math.Max(leftDepth, rightDepth) + 1;
}
}
이 메서드는 재귀적으로 트리를 탐색하며 깊이를 계산합니다. 기저 조건을 이용하여 빈 노드에 도달했을 때는 깊이 0을 반환하게 합니다. 이후, 왼쪽과 오른쪽 자식 노드의 깊이를 구하고 둘 중 더 큰 값을 선택하여 현재 노드의 깊이 1을 더해줍니다.
이제 주어진 이진 트리를 생성하고, 최대 깊이를 구하는 메서드를 호출해보겠습니다.
public static void Main(string[] args) {
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);
Solution solution = new Solution();
int maxDepth = solution.MaxDepth(root);
Console.WriteLine("최대 깊이: " + maxDepth);
}
위 예제에서는 주어진 이진 트리를 생성하고, Solution 클래스의 MaxDepth 메서드를 호출하여 최대 깊이를 구한 뒤 출력하였습니다. 실행 결과, "최대 깊이: 3"이 출력됩니다.
이상으로 오늘의 코딩 테스트 대비 포스팅을 마치겠습니다. 다음 포스팅에서도 더 유용한 정보를 드릴 것입니다. 그럼, 즐거운 코딩 되세요!
'Coding Test' 카테고리의 다른 글
코딩 테스트 대비: 다익스트라 알고리즘을 이용한 최단 경로 찾기 (C#) (0) | 2023.04.25 |
---|---|
코딩 테스트 대비: 백트래킹으로 N-Queens 문제 해결하기(C#) (0) | 2023.04.22 |
코딩 테스트 대비: 이진 트리 순회하기(C#) (0) | 2023.04.21 |
코딩 테스트 대비: 다익스트라 알고리즘을 이용한 최단 경로 찾기(C#) (1) | 2023.04.20 |
이진 탐색 알고리즘으로 정렬된 배열에서 원하는 값을 찾기 (0) | 2023.04.14 |