본문 바로가기

Algorithm/BFS

(C++) - LeetCode (easy) 637. Average of Levels in Binary Tree

반응형

https://leetcode.com/problems/average-of-levels-in-binary-tree/description/

 

Average of Levels in Binary Tree - LeetCode

Can you solve this real interview question? Average of Levels in Binary Tree - Given the root of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 10-5 of the actual answer will be accepted.   Examp

leetcode.com

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;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.