题目如图所示
![58cd0caa9da51bcb824fb13c2e541f57.png](https://img-blog.csdnimg.cn/img_convert/58cd0caa9da51bcb824fb13c2e541f57.png)
题目
思路分析
本题要求求解每一层的结点权值的平均值,其本质就是二叉树层序遍历的应用。二叉树的层序遍历是指按照“从上到下,从左到右”的顺序依次访问每个结点。在实现层序遍历时需要借助队列,对于每个结点按照“先左后右”的顺序将其子结点加入队列,即可实现层序遍历。本题每层遍历前需要保存一下本层的结点的个数,以方便求平均值。
参考代码
/** * 二叉树的结点定义 * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List averageOfLevels(TreeNode root) { List ans = new ArrayList<>(); // 如果是空树直接返回空的结果 if (root == null) return ans; Queue queue = new LinkedList<>(); queue.add(root); double sum; int count; while(queue.size() > 0) { // 记录每一层的结点个数 count = queue.size(); sum = 0.0; for (int i = 0; i < count; i++) { TreeNode tmp = queue.poll(); sum += tmp.val; if (tmp.left != null) { queue.add(tmp.left); } if (tmp.right != null) { queue.add(tmp.right); } } ans.add(sum / count); } return ans; }}