Average of Levels in Binary Tree

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:

  1. The range of node's value is in the range of 32-bit signed integer.
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public List<Double> averageOfLevels(TreeNode root) {
12         List<Double> average = new ArrayList<>();
13         if (root == null) return average;
14         
15         Queue<TreeNode> queue = new LinkedList<>();
16         queue.add(root);
17         while (queue.peek() != null) {
18             average.add(0.0);
19             int n = average.size() - 1;
20             
21             int levelCount = queue.size();
22             int m = levelCount;
23             while (levelCount-- != 0) {
24                 TreeNode temp = queue.poll();
25                 average.set(n, average.get(n) + temp.val);
26                 
27                 if (temp.left != null) queue.add(temp.left);
28                 if (temp.right != null) queue.add(temp.right);
29             }
30             average.set(n, average.get(n) / m);
31         }
32         return average;
33     }
34 }


 

 
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public List<Double> averageOfLevels(TreeNode root) {
12         List<Double> sum = new ArrayList<Double>();
13         List<Integer> count = new ArrayList<Integer>();
14         
15         levelTraversal(root, sum, count, 0);
16         countAverage(sum, count);
17         
18         return sum;
19     }
20     
21     private void levelTraversal(TreeNode root, List<Double> sum, List<Integer> count, int depth) {
22         if (root == null) return;
23         if (depth == sum.size()) {
24             sum.add(0.0);
25             count.add(0);
26         }
27         
28         sum.set(depth, sum.get(depth) + root.val);
29         count.set(depth, count.get(depth) + 1);
30         
31         levelTraversal(root.left, sum, count, depth + 1);
32         levelTraversal(root.right, sum, count, depth + 1);
33     }
34     
35     private void countAverage(List<Double> sum, List<Integer> count) {
36         int n = sum.size();
37         for (int i = 0; i < n; i++) {
38             sum.set(i, sum.get(i) * 1.0 / count.get(i));
39         }
40     }
41 }
原文地址:https://www.cnblogs.com/amazingzoe/p/7145186.html