Last Updated: 19 Nov, 2021

Level Average

Easy
Asked in companies
AmazonFacebookJosh Technology Group

Problem statement

You are given a binary tree. For each level of the binary tree, find the floor value of the average of every node in the tree.

Example:-
For the given binary tree: [1, 2, 3, -1, -1, 4, 5, -1, -1, -1, -1]
Start Node: 3

    1
   / \
 2   3
      / \
     4  5

The answer should be [1,2,4] because level 1 has an average of 1(AVERAGE of 1), level 2 has an average of 2 (floor value) (AVERAGE of 2 and 3) and level 2 has an average of 4 (floor value) (AVERAGE of 4 and 5). 
Input Format :
The first line contains a single integer ‘T’ representing the number of test cases. Then each test case follows.

The first line of each test case contains elements of the tree in the level order form. The line consists of values of nodes separated by a single space. In case a node is null, we take -1 in its place.

For example, the input for the tree depicted in the above image would be :

1
2 3
4 -1 5 6
-1 7 -1 -1 -1 -1
-1 -1
Explanation :
Level 1 :
The root node of the tree is 1

Level 2 :
Left child of 1 = 2
Right child of 1 = 3

Level 3 :
Left child of 2 = 4
Right child of 2 = null (-1)
Left child of 3 = 5
Right child of 3 = 6

Level 4 :
Left child of 4 = null (-1)
Right child of 4 = 7
Left child of 5 = null (-1)
Right child of 5 = null (-1)
Left child of 6 = null (-1)
Right child of 6 = null (-1)

Level 5 :
Left child of 7 = null (-1)
Right child of 7 = null (-1)
Note:
The above format was just to provide clarity on how the input is formed for a given tree. 
The sequence will be put together in a single line separated by a single space. 
Hence, for the above-depicted tree, the input will be given as:
1 2 3 4 -1 5 6 -1 7 -1 -1 -1 -1 -1 -1
Output Format :
For each test case, print ‘H’ integers denoting the average value of all the nodes for a particular level where 'H' is the height of the tree given.

The output of each test case should be printed in a separate line.
Note :
You are not required to print anything, it has already been taken care of. Just implement the function.    
Constraints :
1 <= T <= 5
1 <= N (Number of Nodes) <= 10^5
1 <= VALUE of the nodes <= 10^9

Time Limit = 1 sec

Approaches

01 Approach

Run a breadth-first search and iterate through the levels order-wise and store the sum and number of nodes for every level. In the end, divide the sum of nodes of all the levels by the number of nodes for each level and print the answer.

 

Algorithm:-

 

  • Initialize an empty array named ANS to store the average for every level of the binary tree.
  • Initialize a map named SUM and NUMBER to store the sum of nodes and number of nodes for each level of the binary tree.
  • Initialize an empty QUEUE and add (ROOT,0) to the queue.
  • While QUEUE is not empty.
    • Pop-out the first element (Let the current node be NODE and its level be LEVEL). Add NODE.VAL to SUM[LEVEL] and increment NUMBER[LEVEL] by 1.
    • Add its children to the end of the queue if they are not NULL and increment the level of its children by 1.
  • Iterate through the map SUM in sorted order. (let’s say the iterator be LEVEL).
    • Add to ANS SUM[LEVEL] divided by NUMBER[LEVEL].
  • Return ANS.

02 Approach

Run a depth-first search and iterate through the nodes and store the sum and number of nodes for every level. In the end, divide the sum of nodes of all the levels by the number of nodes for each level and print the answer.

 

Algorithm:-

 

  • Initialize an empty array named ANS to store the average for every level of the binary tree.
  • Initialize a map named SUM and NUMBER to store the sum of nodes and number of nodes for each level of the binary tree.
  • Initialize an empty STACK and add (ROOT,0) to the queue.
  • While STACK is not empty.
    • Pop-out the first element (Let the current node be NODE and its level be LEVEL). Add NODE.VAL to SUM[LEVEL] and increment NUMBER[LEVEL] by 1.
    • Add its children to the start of the queue if they are not NULL and increment the level of its children by 1.
  • Iterate through the map SUM in sorted order. (let’s say the iterator be LEVEL).
    • Add to ANS SUM[LEVEL] divided by NUMBER[LEVEL].
  • Return ANS.