手撕算法-二叉树的层平均值

描述

分析

二叉树的层序遍历。

层序遍历需要用到队列。

代码

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode() {}
 * TreeNode(int val) { this.val = val; }
 * TreeNode(int val, TreeNode left, TreeNode right) {
 * this.val = val;
 * this.left = left;
 * this.right = right;
 * }
 * }
 */
class Solution {
    List<Double> res = new ArrayList<>();

    public List<Double> averageOfLevels(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        bfs(queue);
        return res;
    }

    public void bfs(Queue<TreeNode> queue) {
        int len = queue.size(); // 获取这一层的节点数
        if(len == 0) return;

        long sum = 0; // 注意,放置int类型溢出,使用long型
        for (int i = 0; i < len; i++) {
            TreeNode node = queue.poll(); // 取出
            sum += node.val;
            if (node.left != null) {
                queue.offer(node.left); // 左节点放入队列 
            }
            if (node.right != null) {
                queue.offer(node.right); // 右节点放入队列
            }
        }

        res.add((double) sum / (double) len);

        bfs(queue);
    }
}

面试公司

相关推荐
HVACoder12 分钟前
复习下线性代数,使用向量平移拼接两段线
c++·线性代数·算法
爱coding的橙子18 分钟前
每日算法刷题Day77:10.22:leetcode 二叉树bfs18道题,用时3h
算法·leetcode·职场和发展
Swift社区20 分钟前
LeetCode 404:左叶子之和(Sum of Left Leaves)
算法·leetcode·职场和发展
南枝异客30 分钟前
查找算法-顺序查找
python·算法
QuantumLeap丶31 分钟前
《数据结构:从0到1》-06-单链表&双链表
数据结构·算法
李牧九丶1 小时前
从零学算法59
算法
一匹电信狗1 小时前
【C++】手搓AVL树
服务器·c++·算法·leetcode·小程序·stl·visual studio
月疯1 小时前
离散卷积,小demo(小波信号分析)
算法
敲代码的瓦龙2 小时前
西邮移动应用开发实验室2025年二面题解
开发语言·c++·算法
RTC老炮2 小时前
webrtc弱网-RembThrottler类源码分析及算法原理
网络·算法·webrtc