leetcode 637. Average of Levels in Binary Tree
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.
Example 1:
Input: 3 / \ 9 20 / \ 15 7 Output: [3, 14.5, 11] Explanation: The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].
Note:
- The range of node's value is in the range of 32-bit signed integer.
解法1:
# 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] """ # BFS if not root: return [] ans = [] nodes = [root] while nodes: val = 0.0 nodes2 = [] for node in nodes: val += node.val if node.left: nodes2.append(node.left) if node.right: nodes2.append(node.right) ans.append(val/len(nodes)) nodes = nodes2 return ans
精简版:
# 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] """ # BFS if not root: return [] ans = [] nodes = [root] while nodes: ans.append(sum(node.val for node in nodes)/(len(nodes)+0.0)) nodes = [x for node in nodes for x in (node.left, node.right) if x] return ans
解法2: DFS
# 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] """ if not root: return [] ans = [] self.helper(root, ans, 0) return [a["sum"]/a["count"] for a in ans] def helper(self, root, ans, ith_level): if not root: return if ith_level == len(ans): ans.append({"sum": root.val, "count": 1.0}) else: ans[ith_level]["sum"] += root.val ans[ith_level]["count"] += 1 self.helper(root.left, ans, ith_level+1) self.helper(root.right, ans, ith_level+1)
使用一个数组记录tree每个level的sum。数组的下标是level值,数组的元素是包含sum和count的map。
关于python 生成器:
>>> a=[1,2,3]
>>> def p(a):
... print a
... for i in a:
... print i
...
>>> p(x for x in a)
<generator object <genexpr> at 0x1074ab960>
1
2
3
可以看到sum(xx)的空间复杂度是1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」