zoukankan      html  css  js  c++  java
  • LeetCode题解No637——“二叉树的层平均值”

    LeetCode题解

    No637

    难度:Easy

    题目描述:

    /*
    给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
    
    
    示例 1:
    
    输入:
        3
       / 
      9  20
        /  
       15   7
    输出:[3, 14.5, 11]
    解释:
    第 0 层的平均值是 3 ,  第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
     
    
    提示:
    
    节点值的范围在32位有符号整数范围内。
    
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
     */
    

    题目思路

       看到类似按层求的题目,首先就想到BFS广度优先遍历,这道题也是这样,对于每一层用一个临时的size储存本层的一个长度,根据这个size去从队列中把本层的节点出队,随后用一个sum去维护本层的节点值的和,等该层遍历完之后,将sum/size添加到list中,遍历结束返回list即可

    代码执行

    public class No637 {
       class TreeNode{
           int val;
           TreeNode left;
           TreeNode right;
           TreeNode(int x){
               val = x;
           }
       }
       public List<Double> averageOfLevels(TreeNode root) {
           List<Double> list = new ArrayList<Double>();
           // 特判
           if (root == null){
               return list;
           }
           // 对其进行层序遍历
           Queue<TreeNode> queue = new ArrayDeque<>();
           queue.offer(root);
           // 如果不为空的时候进行循环
           while(!queue.isEmpty()){
               // 每层的一个宽度
               int size = queue.size();
               // 用于保存每层的节点的值的和
               double ans = 0;
               for (int i = 0; i < size; i++) {
                   // 出队
                   TreeNode cur = queue.poll();
                   ans+=cur.val;
                   // 如果当前出队的节点左子树不为空,加入队列中
                   if (cur.left != null){
                       queue.offer(cur.left);
                   }
                   // 如果当前出队的节点右子树不为空,加入队列中
                   if (cur.right != null){
                       queue.offer(cur.right);
                   }
               }
               double cur_ans = ans/size;
               list.add(cur_ans);
           }
           return list;
       }
    }
    

    纠错

    1:第一次跑测试的时候,把代码中的ans值设定成了int类型,导致结果出现29/2 = 14的情况,改成double类型后解决

    执行结果

  • 相关阅读:
    论人力资源的危机及其对策(3)
    maven常见问题问答
    bigtall的敏捷日记(1)
    项目管理沙龙的第一次聚会纪要
    论人力资源的危机与对策(2)
    Crest的OO核心实现
    阿里巴巴图标库,助力微信小程序开发
    微信小程序漂亮的搜索框【样式】
    C# windows 服务看门狗
    微信小程序生命周期
  • 原文地址:https://www.cnblogs.com/mlz031702145/p/13656069.html
Copyright © 2011-2022 走看看