方法一:
public static List<Double> averageOfLevels(TreeNode root) {
if(root==null)return null;
List<Double> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
int len = 0;
queue.add(root);
while (!queue.isEmpty()){
double sum = 0;
len = queue.size();
for (int i = 0; i < len; i++) {
TreeNode tmp = queue.poll();
sum+=tmp.val;
if(tmp.l!=null){queue.add(tmp.l);}
if(tmp.r!=null){queue.add(tmp.r);}
}
list.add(sum*1.0/len);
}
return list;
}
方法二:
count表示当前层元素个数
sumNum表示当前层元素和
用curLast表示当前层最后一个节点
nextLast表示下一层最后一个节点
判断当前取得的节点tmp是否是当前层最后一个节点,若是的话curLast赋值为nextLast,计数求均值,并清零count和sumNum
public static List<Double> averageOfLevels(TreeNode root){
if(root==null)return null;
List<Double> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
TreeNode curLast = root;
TreeNode nextLast = root;
int count = 0;
int sumNum = 0;
while (!queue.isEmpty()){
TreeNode tmp = queue.poll();
count++;
sumNum+= tmp.val;
System.out.print(tmp.val);
if(tmp.l!=null){
queue.add(tmp.l);
nextLast = tmp.l;
}
if(tmp.r!=null){
queue.add(tmp.r);
nextLast = tmp.r;
}
if(tmp == curLast){
curLast = nextLast;
list.add(sumNum*1.0/count);
count = 0;
sumNum = 0;
}
}
return list;
}