Skip to the content.

Problem #637 ( | Binary Tree, Breadth First Search, Depth First Search, 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.

Example 1

image

Input:

root = [3,9,20,null,null,15,7] <br/>

Output:

[3.00000,14.50000,11.00000] <br/>

Explanation:

The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11.
Hence return [3, 14.5, 11].

Example 2

image

Input:

root = [3,9,20,15,7] <br/>

Output:

[3.00000,14.50000,11.00000]

Constraints

Solutions

The idea is to create a Queue which stores the nodes in each level of the Binary Tree, by default root node is inserted first. For each node in a level, the average of the sum is stored inside a List.

The code is structured as such:

vector<double> list;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
    // ...statements
}

Inside the while loop:

while(!q.empty()){
    int n = q.size();
    double sum = 0.0;
}
while(!q.empty()){
    int n = q.size();
    double sum = 0.0;
    for(int i = 0; i < n; i++){
        TreeNode* node = q.front();
        q.pop();
        sum += q->val;
        if(node->left) q.push(node.left);
        if(node->right) q.push(node.right);
    }
    list.append(sum/n);
}

Exiting the while loop…

return list;

Code

Complexity