# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def averageOfLevels(self, root):
"""
:type root: TreeNode
:rtype: List[float]
"""
s = []
def dfs(node, depth=0):
if node:
if len(s) <= depth:
s.append([0, 0])
s[depth][0] += node.val
s[depth][1] += 1
dfs(node.left, depth + 1)
dfs(node.right, depth + 1)
dfs(root)
return [a/float(b) for a, b in s]
Sol = Solution()
t1 = TreeNode(1)
t1.left = TreeNode(2)
t1.right = TreeNode(3)
print Sol.averageOfLevels(t1)
0,较为高效
1,学到的东西:
首先,在定义函数时,可以对函数值进行初始化操作,也就是def dfs(node, depth=0):
这样,在调用时,便可以省略一些。当然,也可以不写,然后在调用时传递参数。
其次,算法的思想是定义一个二维数组,利用二维数组的特性,对点的层数进行标记并计算和。这也是层次遍历的基本思想和简单实现。
最后,简单的遍历二维数组的方式:
[a/float(b) for a, b in s]
#a为s的一维元素,b为s的二维元素,依次进行遍历