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