https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/description/
①迭代版本
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> re=new ArrayList<>();
double[] ave =new double[1000];
int[] n = new int[1000];
int dep = -1;
average(root,dep,n,ave);
for(int i=0;i<1000;i++) {
if(n[i]==0) break;
re.add(ave[i]/n[i]);
}
return re;
}
private void average(TreeNode root,int dep,int[] n,double[] ave) {
if(root==null) return ;
dep+=1;
ave[dep] += root.val;
n[dep] +=1;
average(root.left,dep,n,ave);
average(root.right,dep,n,ave);
}
}
数组容量问题待优化
②非迭代版本
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> re = new ArrayList();
if (root == null) {
return re;
}
List<TreeNode> list = new ArrayList();
list.add(root);
while (!list.isEmpty()) {
List<TreeNode> nextList = new ArrayList();
int n = 0;
double sum = 0;
for (TreeNode cur : list) {
sum += cur.val;
n++;
if (cur.left != null) {
nextList.add(cur.left);
}
if (cur.right != null) {
nextList.add(cur.right);
}
}
double average = sum / n;
re.add(average);
list = nextList;
}
return result;
}
}