637. 二叉树的层平均值 ;值得思考的层序遍历
值得思考的层序遍历.md
- 二叉树的层平均值
https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/
描述
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.
示例 1:
输入:
3
/ \
9 20
/ \
15 7
输出: [3, 14.5, 11]
解释:
第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].
try1
# 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 root == None: return [0]
ret = []
que = []
que.append(root)
sum = 0
watcher = len(que)
counter = 0
while(len(que) != 0) :
node = que.pop(0)
sum += node.val
counter += 1
# if we traverse all node in one level
if (counter == watcher):
watcher = len(que)
ret.append(sum / counter)
counter = 0
sum = 0
if node.left: que.append(node.left)
if node.right: que.append(node.right)
return ret
final ans
# 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 root == None: return [0]
ret = []
que = []
que.append(root)
sum = 0
watcher = len(que)
counter = 0
while(len(que) != 0) :
sum = 0
counter = 0
watcher = len(que)
while counter < watcher:
node = que.pop(0)
sum += node.val
if node.left: que.append(node.left)
if node.right: que.append(node.right)
counter += 1
ret.append(sum / counter)
return ret
'''
执行用时 :
88 ms
, 在所有 Python3 提交中击败了
19.58%
的用户
内存消耗 :
15.8 MB
, 在所有 Python3 提交中击败了
44.35%
的用户
'''
think; different;
final ans 和 try 1 的区别就是
final ans 是在层序遍历中内嵌一个循环, 做小规模的 本 level 的问题。
try1 的失败是,企图使用一个while,完成整个问题:使用if拦截,结果是不对的,因为拦截存在失误。
todo 找到 try1 的if 拦截 失误在哪里, 可否令try1 框架正确。