이진 트리가 주어졌을 때 트리의 가장 얕은 깊이를 구하는 문제입니다.
DFS와 BFS 두 방식으로 모두 풀 수 있습니다.
하지만 DFS는 결국 모든 노드를 방문하게 되고 BFS는 중간에 가장 얕은 깊이를 찾으면 끝나기 때문에 BFS가 조금 더 빠릅니다.
BFS 방식
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
int minDepth(TreeNode* root) {
if (root == nullptr) // 예외처리
return 0;
std::queue<TreeNode*> q;
q.push(root);
int depth = 0;
while (!q.empty()) {
depth++; // 현재 깊이
// 각각의 Level을 방문
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
// 자식 노드 없다면 현재 Level이 Minimum Depth
if (node->left == nullptr && node->right == nullptr)
return depth;
// 자식 노드가 있으면 더 깊이 갈 수 있다는 의미
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
}
}
return depth; // 모든 노드가 연결되어 있다면
}
DFS 방식 (재귀 사용)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
// Recursion 방식
int DepthHelper(TreeNode* node) {
if (node == nullptr)
return 0;
// 현재 노드의 왼쪽, 오른쪽 자식 노드를 타고 더 깊이 들어가기
int leftDepth = DepthHelper(node->left);
int rightDepth = DepthHelper(node->right);
// 더이상 갈 수 없다면
if (node->left == nullptr && node->right == nullptr)
return 1;
// 오른쪽 자식 노드가 있다면
if (node->left == nullptr)
return 1 + rightDepth;
// 왼쪽 자식 노드가 있다면
if (node->right == nullptr)
return 1 + leftDepth;
// 왼쪽, 오른쪽 자식 노드가 모두 있다면 그 중 가장 얕은 깊이
return 1 + std::min(leftDepth, rightDepth);
}
int minDepth(TreeNode* root) {
return DepthHelper(root);
}
'Algorithm 문제풀이 > Leetcode' 카테고리의 다른 글
(Easy - Binary Search) Leetcode - 704 : Binary Search (0) | 2024.06.20 |
---|---|
(Easy - Backtracking) Leetcode - 257. Binary Tree Paths (0) | 2024.06.20 |
(Easy - BFS) Leetcode - 637. Average of Levels in Binary Tree (0) | 2024.06.19 |
(Easy - Array) Leetcode - 2022. Convert 1D Array Into 2D Array (0) | 2024.06.18 |
(Easy - Arrays) Leetcode - 136. Single Number (0) | 2024.06.17 |