LC637. 二叉树的层平均值

def averageOfLevels(self, root):
        """
        :type root: TreeNode
        :rtype: List[float]
        """
        self.sum = []
        self.count = []
        def pre(root,depth):
            if not root:
                return 
            if depth < len(self.sum):           #使用记录值的sum数组巧妙的记录了层数的信息
                self.sum[depth] += root.val     #如果sum中已经记录了当前层的值了,直接在对应层加上节点的值就行
                self.count[depth] += 1          #直接在记录个数的对应层加上计数
            else:
                self.sum.append(root.val)       #sum中还没有记录这一层的值,把这一层的第一次遇到的值加进去
                self.count.append(1)            #开始从这一层计数,为1
            pre(root.left,depth+1)
            pre(root.right,depth+1)
        pre(root,0)                             #zip的用法是把元素打包成元组
        return [self.sum/float(self.count) for self.sum,self.count in zip(self.sum,self.count)] 

BFS

def averageOfLevels(self, root):
        """
        :type root: TreeNode
        :rtype: List[float]
        """
        res = []
        stack = [root]
        while stack:
            cur_sum = 0
            n = len(stack)
            for i in range(n):
                node = stack.pop(0)
                cur_sum += node.val
                if node.left:
                    stack.append(node.left)
                if node.right:
                    stack.append(node.right)
            res.append(cur_sum/float(n))
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值