leetcode637(二叉树的层平均值:二叉树的BFS遍历)

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。

示例 1:
输入:
[3,9,20,null,null,15,17]
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。

题解:这道题是一道简单的二叉树遍历问题,BFS方法与DFS方法都可以实现,这里我主要想说的是BFS方法,因为BFS算法实际上就是按照层序来一层一层遍历的,与这道题的求层平均值的要求很契合,具体做法就是先往BFS算法所需要维护的队列中加入根节点,然后按照层序遍历下去,在遍历的过程中,每次我们都要取出当前队列中的所有元素,计算这些元素平均值,同时需要往队列中加入队列中元素的子结点。

class Solution {
    
    
    public List<Double> averageOfLevels(TreeNode root) {
    
    
         if(root==null)
             return new ArrayList<>();
             /*
              * res用于存储结果
              * Nodes是BFS中需要用到的队列
              * list用于临时存储每一层的结点key值
              */
         List<Double>res=new ArrayList<>();
         List<Integer>list=new ArrayList<>();
         Queue<TreeNode>Nodes=new LinkedList<>();
         Nodes.add(root);
         while(!Nodes.isEmpty()){
    
    
             TreeNode node=null;
             int size=Nodes.size();
           for(int i=0;i<size;i++){
    
    
               node=Nodes.poll();
               list.add(node.val);
               if(node.left!=null)
                   Nodes.add(node.left);
               if(node.right!=null)
                   Nodes.add(node.right);
           }
           res.add(layerAverage(list));
           list.clear();
         }
           return res;
    }
    private double layerAverage(List<Integer>list){
    
    
        double sum=0;
        for(int x:list){
    
    
            sum+=x;
        }
        return sum/list.size();
    }
}

猜你喜欢

转载自blog.csdn.net/CY2333333/article/details/108553639