728x90
반응형


문제 풀기 전 생각 :
/*
재귀함수의 형식으로 문제를 풀기로 결정했다
res에 제일 깊은 깊이값을 저장하고
리턴할 때 해당 노드가 비어있지 않다면
해당 함수가 리턴받은 값에서 가장 큰 값에 1을 더한후 리턴한다
그리고 리턴받은 left 값과 right 값을 더한 값이 res와 비교해
더욱 큰 값을 res에 넣는다.
*/
class Solution {
public:
int diameterOfBinaryTreeUtil(TreeNode* root, int &res) {
if(root == NULL) return 0;
int l = diameterOfBinaryTreeUtil(root->left, res);
int r = diameterOfBinaryTreeUtil(root->right, res);
res = max(l + r, res);
return max(l, r) + 1;
}
int diameterOfBinaryTree(TreeNode* root) {
int res = 0;
diameterOfBinaryTreeUtil(root, res);
return res;
}
};
https://leetcode.com/problems/diameter-of-binary-tree/
Diameter of Binary Tree - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
풀 때 어려웠던 점 또는 느낀점 :
트리 관련 문제가 처음에는 복잡했지만
문제를 풀수록 조금씩 익숙해지는듯 해
기쁘다
개선방안 :
class Solution {
public:
int getDia(TreeNode* root, int& sum){
if(!root) return 0;
int lst = getDia(root->left, sum);
int rst = getDia(root->right, sum);
sum = max(sum, (1 + lst + rst));
return 1 + max(lst , rst);
}
int diameterOfBinaryTree(TreeNode* root) {
if(!root) return 0;
int sum = 0;
getDia(root, sum);
return sum - 1;
}
};
같은 접근법인것 같다.
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[C++][백준 1406] 에디터 (0) | 2022.01.25 |
---|---|
[C++] [백준 2783] 삼각 김밥 (0) | 2021.08.09 |
[C++] [백준 3040] 백설 공주와 일곱 난쟁이 (0) | 2021.08.09 |
[C++] [백준 15552] 빠른 A+B (0) | 2021.08.09 |
[C++] [백준 1920] 수 찾기 (0) | 2021.08.09 |
댓글