I transformed the tree into a list of nodes at each depth, then found the average of each of those lists. Not the more efficient, but very straight forward to quick PASS during the contest!

```
def __init__(self):
self.depth_node_list = {}
def averageOfLevelsHelper(self, node, depth):
if node is None:
return None
if depth in self.depth_node_list:
self.depth_node_list[depth].append(node.val)
else:
self.depth_node_list[depth] = [node.val]
self.averageOfLevelsHelper(node.left, depth+1)
self.averageOfLevelsHelper(node.right, depth+1)
def averageOfLevels(self, root):
"""
:type root: TreeNode
:rtype: List[float]
"""
result = []
if root == None:
return []
self.averageOfLevelsHelper(root, 0)
for key, node_list in self.depth_node_list.items():
sum = 0.0
cnt = 0.0
for val in node_list:
sum += val
cnt += 1.0
result.append(sum/cnt)
return result
```