题目
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
自练代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def averageOfLevels(self, root: TreeNode) -> List[float]:
if not root: # 判断特殊情况
return []
res = [root] # 存的是本层
next = [] # 存的是下一层
ans = [] # 存的是输出结果
while(res): # 本层存在的时候
aver = [] # 存的是本层的各个节点值
for node in res: # 遍历的是本层
aver.append(node.val) # 本层的所有节点值进入列表
if node.left: # 开始下一层进入next列表
next.append(node.left)
if node.right:
next.append(node.right)
tmp = sum(aver) / len(aver) # 求本层的平均
ans.append(tmp)
res = next[:] # 下一层变为本层
next = [] # 重新设置下一层为空
return ans
效率
执行用时:60 ms, 在所有 Python3 提交中击败了86.02%的用户
内存消耗:15.7 MB, 在所有 Python3 提交中击败了96.52%的用户
大神代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def averageOfLevels(self, root: TreeNode) -> List[float]:
if not root:
return []
res = []
queue = [root]
while queue:
cur = [] # 保存当前层的遍历值,因为queue保存的是TreeNode类型
nxt = [] # 保存下一层的节点
for node in queue:
cur.append(node.val)
if node.left:
nxt.append(node.left)
if node.right:
nxt.append(node.right)
'''记录平均值'''
res.append(sum(cur)/len(cur))
queue = nxt # 每次更新queue
return res
效率
执行用时:80 ms, 在所有 Python3 提交中击败了18.24%的用户
内存消耗:16 MB, 在所有 Python3 提交中击败了60.46%的用户
总结
不会写。。。