1 题目描述
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。637. 二叉树的层平均值
2 解题思路
此题是二叉树层序遍历的拓展。
- 创建一个队列que用来相关操作,一个列表res用来保存结果。
- 若root为null,则直接返回res。
- 当root非null时,将其加入到队列que中。
- 进入条件为队列que非空的循环,用len和n记录此时que的长度,声明sum为0,double类型的avg = 0.
- 再进入条件为len>0的内部循环,将队列que的队首节点弹出赋给node,将值赋给为tempNum,然后sum +=tempNum。若node的左右节点存在则都加入队列que中,然后len–。
- avg = (double)sum/n , res.add(avg);
- 返回结果res
3 流程图
3 代码
public List<Double> averageOfLevels(TreeNode root) {
List<Double> res = new ArrayList<>();
if(root == null) return res;
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int len = que.size();
int n = len; //用来记录个数,n暂时不变
long sum = 0; //声明为int数据会溢出
double avg = 0;
while(len>0){
TreeNode node = que.poll();
int tempNum = node.val;
sum += tempNum;
if(node.left != null) que.offer(node.left);
if(node.right != null) que.offer(node.right);
len--;
}
avg = (double)sum / n; //计算每一层的平均值
res.add(avg);
}
return res;
}