반응형
https://leetcode.com/problems/average-of-levels-in-binary-tree/description/
bfs 로 해결한 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
정답변수 ans를 선언 후 BFS를 위한 queue인 q를 선언해줍니다.
📔 풀이과정
2중 while문을 사용해 level별로 순회가 가능합니다.
1. 첫 번째 while문은 level이 존재하는지 여부입니다. q의 size가 0이면 loop 탈출 가능합니다.
2. 두 번째 while문은 level에 있는 node만큼 순회해주기 위한 loop입니다. 하나의 원소를 순회하면서 node val의 합을 임시변수 avg에 저장해줍니다.
3. 두 번째 while문을 탈출 후 avg / 하나의 level에 해당하는 node개수를 ans에 저장해줍니다.
📕 Code
📔 C++
/**
* 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) {}
* };
*/
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector <double> ans;
queue <TreeNode*> q;
q.push(root);
while(!q.empty()) {
int qSize = q.size();
double avg = 0, nodeNum = qSize;
while(qSize) {
TreeNode *frontNode = q.front();
q.pop();
qSize--;
avg += frontNode->val;
if(frontNode->left) {
q.push(frontNode->left);
}
if(frontNode -> right) {
q.push(frontNode->right);
}
}
ans.push_back(avg/nodeNum);
}
return ans;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > BFS' 카테고리의 다른 글
(C++) - LeetCode (easy) 1030. Matrix Cells in Distance Order (0) | 2023.10.12 |
---|---|
(C++) - LeetCode (easy) 733. Flood Fill (0) | 2023.06.27 |
(C++) - 백준(BOJ) 2251 : 물통 (0) | 2022.06.30 |
(C++) - 백준(BOJ) 14248 : 점프 점프 (1) | 2022.06.25 |
(C++) - 백준(BOJ) 1726 : 로봇 (0) | 2022.06.24 |