637. Average of Levels in Binary Tree

来源:互联网 发布:淘宝客在哪里参加 编辑:程序博客网 时间:2024/05/16 08:47

637. Average of Levels in Binary Tr

DescriptionHintsSubmissionsDiscussSolution
DiscussPick One

Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.

Example 1:

Input:    3   / \  9  20    /  \   15   7Output: [3, 14.5, 11]Explanation:The average value of nodes on level 0 is 3,  on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].

Note:

  1. The range of node's value is in the range of 32-bit signed integer.

题意:

求一个二叉树每层的平均值

算法思路:

我首先想到的是按层次遍历的方法,用到两个队列
首先在queue中添加根节点,queue的size就是该层节点的数量
对每层的节点进行一个循环
出队一个节点,求和,把他的左右子树进入临时的temp队列
循环结束之后temp队列中就是当前层节点的所有子节点,所以这是把queue = temp继续循环
每次for循环结束求一个平均值,放到最后的结果list中

代码:

package easy;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class AverageofLevelsinBinaryTree {public List<Double> averageOfLevels(TreeNode root) {        List<Double> result = new ArrayList<>();                Queue<TreeNode> queue = new LinkedList<>();                queue.add(root);                while(!queue.isEmpty()){                long sum = 0;        long size = queue.size();                Queue<TreeNode> temp = new LinkedList<>();                for(int i=0; i<size; i++){        TreeNode treeNode = queue.remove();        sum += treeNode.val;                       if(treeNode.left != null){            temp.add(treeNode.left);            }                        if(treeNode.right != null){            temp.add(treeNode.right);            }                    }          queue = temp;        result.add(sum * 1.0 / size);        }                return result;    }public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}}