637. 二叉树的层平均值

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

示例 1:

输入:
    3
   / \
  9  20
    /  \
   15   7
输出: [3, 14.5, 11]
解释:
第0层的平均值是 3,  第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].
注意:

节点值的范围在32位有符号整数范围内。
class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> res = new ArrayList();
        if(root == null)
            return res;
        TreeNode cur = null;        

        Queue<TreeNode> queue = new LinkedList();
        queue.offer(root);
        while(!queue.isEmpty()){
            int count = queue.size();
            double sum = 0;

            for(int i=0;i<count;i++){
                cur = queue.poll();
                sum += cur.val;
                if(cur.left != null)
                    queue.offer(cur.left);               
                if(cur.right != null)
                    queue.offer(cur.right);                
            }
            res.add(sum/count);    
        }
        return res;
    }
}

在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多的节点数,就能保证这次遍历的都是当前层的节点。

class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> res = new ArrayList();
        if(root == null)
            return res;
        TreeNode cur = null;
        TreeNode last = root;
        TreeNode nlast = null;
        int count = 0;
        double sum = 0;
        Queue<TreeNode> queue = new LinkedList();
        queue.offer(root);
        while(!queue.isEmpty()){
            cur = queue.poll();
            count++;
            sum += cur.val;



            if(cur.left != null){
                queue.offer(cur.left);
                nlast = cur.left;
            }
            if(cur.right != null){
                queue.offer(cur.right);
                nlast = cur.right;
            }
            //注意:这个要放在后面,因为nlast
            if(cur == last){
                double tmp = sum / count;
                res.add(tmp);
                sum = 0;
                count = 0;
                last = nlast;
            }

        }
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/xuchonghao/article/details/80728325