637. 二叉树的层平均值 ;值得思考的层序遍历

值得思考的层序遍历.md [toc]

  1. 二叉树的层平均值

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 框架正确。

猜你喜欢

转载自www.cnblogs.com/paulkg12/p/12356082.html