• 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类型后解决

    执行结果

  • 相关阅读:
    函数指针
    回调函数
    内核文件ntoskrnl.exe,ntkrnlpa.exe的区别??
    单引号和0的ASCII码
    文件句柄和句柄
    ObReferenceObjectByName蓝屏问题
    DbgPrint/KdPrint输出格式控制
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    Mac中SVN的常见命令
    小程序分包加载实现代码包总上限8M
  • 原文地址:https://www.cnblogs.com/mlz031702145/p/13656069.html
Copyright © 2020-2023  润新知