# "one-liner"

• Well, one line in addition to copying&pasting a solution from the earlier Binary Tree Level Order Traversal problem and importing the statistics module. I just like to reuse my code.

``````from statistics import mean

class Solution:

def averageOfLevels(self, root):
return list(map(mean, self.levelOrder(root)))

# copied&pasted from old problem's solution:
def levelOrder(self, root):
levels = []
level = [root]
while any(level):
levels.append([node.val for node in level])
level = [kid for node in level for kid in (node.left, node.right) if kid]
return levels
``````

Here's a version without that help:

``````def averageOfLevels(self, root):
averages = []
level = [root]
while level:
averages.append(sum(node.val for node in level) / len(level))
level = [kid for node in level for kid in (node.left, node.right) if kid]
return averages``````

• need to change to float, otherwise, python will use integer division by default

• @JoyceZhang Not true in Python 3, which I used.

• I think your code really reveals the power of python. I learned something from it. Thank you.

Here is my 'java' style python code using DFS.

``````class Solution:
def averageOfLevels(self, root):
"""
:type root: TreeNode
:rtype: List[float]
"""

levels = []
def traverse(root, lvl):
if not root: return
if len(levels) == lvl:
levels.append([])
levels[lvl].append(root.val)
traverse(root.left, lvl+1)
traverse(root.right, lvl+1)

traverse(root, 0)
return [sum(l)/len(l) for l in levels]
``````

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.