Algorithm
[ leetcode ] 111. Minimum Depth of Binary Tree
궁금한게 많은 개발자
2023. 5. 2. 12:53
Binary Tree가 주어졌을 때, root에서 leaf node까지 가장 짧은 경로의 길이를 구하는 문제입니다.
재귀를 이용하여 해당 노드가 NULL이면 0을 반환하고 left, child중 짧은 길이를 반복적으로 반환하면서 해를 구합니다.
이 때 left나 right child중 하나 이상 NULL이면 최소값이 0으로 되므로 조건문으로 큰 값이 포함되도록 해줍니다.
둘 다 NULL이 아닐 때는 둘 중 작은 값, 하나 이상 NULL 이면 1 이거나 값이 있는 것을 반환 하도록 합니다.
(자식 한쪽만 값이 있는 경우 해당 노드는 leaf가 아니므로 leaf의 값을 가져가야 함)
/**
* 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) {}
* };
*/
#define min(a, b)(a > b ? b : a)
class Solution {
public:
int minDepth(TreeNode* root) {
if (!root) return 0;
int left = minDepth(root->left);
int right = minDepth(root->right);
if (!left || !right) return 1 + left + right;
return 1 + min(left, right);
}
};