[c++] 이진 트리의 직경(Diameter of Binary Tree)
이진 트리의 직경(Diameter)은 트리의 두 노드 간 가장 긴 경로의 길이를 나타냅니다.
우선, 이진 트리의 직경을 구하는 문제는 다음과 같은 트리 구조의 클래스가 주어졌을 때, C++로 구현할 수 있습니다.
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
그 다음으로, 직경을 계산하는 함수는 다음과 같이 구현할 수 있습니다.
class Solution {
public:
int diameterOfBinaryTree(TreeNode* root) {
int result = 0;
depth(root, result);
return result;
}
int depth(TreeNode* node, int& result) {
if (node == NULL) return 0;
int left = depth(node->left, result);
int right = depth(node->right, result);
result = max(result, left+right);
return 1 + max(left, right);
}
};
위의 코드에서는 depth 함수를 활용하여 각 노드의 서브 트리의 깊이를 계산하고, 이를 통해 두 노드 간의 거리를 구하게 됩니다.
결론
이진 트리의 직경을 구하는 문제는 각 노드의 서브 트리의 깊이를 고려하여 효율적으로 해결할 수 있습니다.
또한, 해당 문제에 대한 자세한 내용은 LeetCode에서 확인할 수 있습니다.