QUESTION:
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.
Example 1:
Input:
3
/ \
9 20
/ \
15 7
Output: [3, 14.5, 11]
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].
Note:
- The range of node’s value is in the range of 32-bit signed integer.
EXPLANATION:
很容易想到的就是层序遍历。数的层序遍历也就不多说了,就是用一个queue来保存每层的节点。然后结束的时候就可以的queue.size相当于这层的层数。
但是我这个地方用的是另外一个方法,在遍历数的时候就把个数和和都一起求出来了,然后再计算得到结果就可以。但是发现还没有层序遍历来的快。诶。
SOLUTION:
public class Solution {
public double[][] averageOfLevelsCount = new double[1000][2];
public int averageOfLevelsLevel = 0;
public List<Double> averageOfLevels(TreeNode root) {
averageofLevelsHelper(root,0);
System.out.println(averageOfLevelsLevel);
ArrayList<Double> result = new ArrayList<>();
for(int i = 0;i<=averageOfLevelsLevel;i++){
result.add(averageOfLevelsCount[i][1]/averageOfLevelsCount[i][0]);
}
return result;
}
public void averageofLevelsHelper(TreeNode root,int level){
if(root==null) return;
averageOfLevelsLevel = Math.max(level,averageOfLevelsLevel);
averageOfLevelsCount[level][0]++;
averageOfLevelsCount[level][1]+=root.val;
averageofLevelsHelper(root.left,level+1);
averageofLevelsHelper(root.right,level+1);
}
}