637. Average of Levels in Binary Tree

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

Input:
3
/ \
9 20
/ \
15 7
Output: [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].

问题分析:计算每一层的平均数,用一种水平投影的视角来看这个二叉树。每一层的层数为数组索引,用两个数组分别存储和值sum与结点个数count。自己写了一种方法来递归,然而变成了纵向求和,求解错误。参考了leetcode的示例代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        int height = getHeight(root);
        long[] levelSum = new long[height];
        int[] count = new int[height];
        getSum(root, levelSum, count, 0);
        List<Double> res = new LinkedList<>();
        for (int i = 0;i < levelSum.length;i ++){
            res.add(levelSum[i]*1.0/count[i]);
        }
        return res;
    }

    private int getHeight(TreeNode root){//得到树高度,来定义数组
        if (root == null) return 0;
        return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
    }

    private void getSum(TreeNode r, long[] l, int[] c, int i) {
        if (r == null) return;
        l[i] += r.val;
        c[i] ++;
        getSum(r.left, l, c, i+1);//i+1保证了把一个水平上的结点值累加到对应的数组位置上
        getSum(r.right, l, c, i+1);
        return;
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值